Computer >> Máy Tính >  >> Điện thoại thông minh >> Linux

Cách bắt đầu sử dụng awk

awk, sed và grep là ba trong số các công cụ yêu thích của tôi trong dòng lệnh Linux hoặc UNIX. Tất cả chúng đều khá mạnh. Hôm nay chúng ta sẽ xem xét cách bẻ khóa awk để giúp bạn dễ dàng sử dụng. Sau đó, chúng tôi sẽ xem xét một số lớp lót awk one hữu ích để làm cho mọi thứ trở nên thú vị hơn cho bạn.

AWK là một ngôn ngữ lập trình được thiết kế để xử lý dữ liệu dựa trên văn bản, ở dạng tệp hoặc luồng dữ liệu. Nó được tạo ra tại Bell Labs vào những năm 1970. Mặc dù nó khá cũ, nhưng đừng để bị lừa bởi tuổi tác. Nó cực kỳ mạnh mẽ và hiệu quả với những gì nó làm. Bây giờ chúng ta hãy làm bẩn bàn tay của mình.

Trước khi đi sâu vào cách làm việc phức tạp và cách sử dụng awk, hãy cùng bạn bắt đầu những điều cơ bản về nó. Chúng tôi sẽ tạo và sử dụng một tệp giả cho bài tập này. Bạn có thể sử dụng khá nhiều tệp văn bản, chẳng hạn như nhật ký từ hệ thống của bạn. Tôi sẽ sử dụng kết quả đầu ra mẫu từ một trong những công cụ giám sát hệ thống yêu thích của tôi - Dstat. Đây là kết quả:

Cách bắt đầu sử dụng awk
nhấp để phóng to

Đây là một đầu ra lý tưởng cho awk để xử lý. awk là tuyệt vời với nội dung được phân tách bằng dấu phẩy hoặc tab. Bạn sẽ sớm biết lý do tại sao. Vì vậy, hãy tạo một số dữ liệu tương tự hoặc sao chép và dán ví dụ của tôi ở trên vào một tệp giả có tên là test.txt. Khởi chạy cửa sổ đầu cuối trên máy tính Linux của bạn. Hầu hết tất cả các phiên bản Linux đều có awk. Trong trường hợp bạn tìm thấy một cái mà không có nó vì một lý do nào đó, hãy cài đặt nó. Trên cửa sổ đầu cuối, nhập nội dung sau từ thư mục bạn đã lưu trữ tệp test.txt -

# awk {‘print’} test.txt

Đầu ra phải chứa toàn bộ nội dung của tệp văn bản. Điều đó có gì thú vị.

Bây giờ, hãy xem cách bạn có thể chọn một cột và chỉ in một cột đó. Thực hiện lệnh sau:

# awk {‘print $ 1’} test.txt

Bây giờ chúng tôi yêu cầu awk chỉ in cột đầu tiên của tệp văn bản. Nó sẽ tự động tìm ra rằng tệp là một tab được phân tách và chỉ in cột đầu tiên của nội dung. Bạn sẽ thấy một cái gì đó như thế này trong đầu ra:

—-Total-cpu-use—-
usr
5
13
8
0
1
1
1
br /> 0
1
1

Bạn có thể làm tương tự cho bất kỳ cột nào bạn thích. Nếu bạn muốn awk in lệnh thay đổi cột thứ ba ở trên được hiển thị lệnh thành:

# awk {‘print $ 3’} test.txt

Bạn cũng có thể có nhiều cột in awk. Vì vậy, nếu bạn muốn in các cột đầu tiên, thứ ba và thứ bảy, hãy thêm chúng vào lệnh được phân tách bằng dấu phẩy.

# awk {‘print $ 1, $ 3, $ 7 ′} test.txt

sẽ thực hiện thủ thuật cho bạn:

—-Total-cpu-use—- -net / total-
usr idl read
5 93 154k
13 87 0
8 92 0
0 99 0
1 97 0
1 98 0
1 99 0
0 99 0
1 99 0
1 100 0

Nếu bạn có một tệp phức tạp hơn như tệp / etc / password trong đó dữ liệu được phân tách bằng dấu hai chấm thay vì dấu cách hoặc tab, awk sẽ không tự động chọn tệp đó. Trong những trường hợp như vậy, bạn có thể cấp awk bằng dấu phân tách chính xác. Sử dụng lệnh như sau để in cột thứ hai của tệp:

# awk -F ’:’ {‘print $ 1’} / etc / passwd

Lệnh này sẽ cung cấp cho bạn kết quả đầu ra của tên người dùng của tất cả người dùng trên hệ thống của bạn:

táo
xoài
chuối
dưa hấu
kiwi
cam

Bạn có thể làm tương tự với bất kỳ loại dải phân cách nào khác. Bạn cũng có thể sử dụng awk để phân tích cú pháp các tệp nhật ký của mình. Ví dụ:nếu bạn muốn xem tất cả địa chỉ IP và URL web liên quan đã được truy cập trên máy chủ web của mình, bạn có thể sử dụng awk để phân tích cú pháp nhật ký truy cập của máy chủ web của bạn để lấy thông tin này. Sử dụng lệnh sau:

# awk ‘$ 9 ==200 {print $ 1, $ 7}’ access.log

199.63.142.250 / 2008/10 / my-5-thich-hangouts /
220.180.94.221 / 2009/02 / querious-a-mysql-client-for-the-mac /
67.190.114.46 / 2009/05 /
173.234.43.110 / 2009/01 / xe đạp-cho thuê /
173.234.38.110 /wp-comments-post.php

Sử dụng phân tích cú pháp như thế này, bạn có thể biết được ai đó có truy cập trang web của bạn nhiều hay không, vì họ có thể đang ăn cắp thông tin. Bạn cũng có thể sắp xếp thông tin này. Giả sử bạn muốn biết số lần một địa chỉ IP cụ thể đã truy cập trang web của bạn

# awk ‘$ 9 ==200 {print $ 1}’ access.log | sắp xếp | uniq -c | sắp xếp -nr

46 122.248.161.1
35 122.248.161.2
26 65.202.21.10
24 67.195.111.46
19 144.36.231.111
18 59.183.121.71