Computer >> Hướng Dẫn Máy Tính >  >> Điện Thoại Thông Minh >> Linux

Hướng dẫn bắt đầu sử dụng awk

awk, sed, và grep là ba công cụ yêu thích của tôi trong dòng lệnh Linux hoặc UNIX. Chúng đều khá mạnh. Hôm nay chúng ta sẽ xem cách bắt đầu với awk để giúp bạn dễ dàng làm quen. Sau đó chúng ta sẽ xem một số one-liner awk hữu ích để mọi thứ thú vị hơn.

AWK là ngôn ngữ lập trình thiết kế cho xử lý dữ liệu dựa trên văn bản, hoặc trong file hoặc luồng dữ liệu. Nó được tạo tại Bell Labs những năm 1970. Dù khá cũ, đừng bị lừa bởi tuổi đời. Nó cực kỳ mạnh mẽ và hiệu quả tại việc nó làm. Hãy bám tay vào thực hành ngay.

Trước khi đi sâu vào hoạt động phức tạp và cách dùng awk, hãy bắt đầu với cơ bản. Chúng ta sẽ tạo và dùng file giả (dummy file) cho bài tập. Bạn có thể dùng bất kỳ file văn bản nào, như log từ hệ thống. Tôi sẽ dùng đầu ra mẫu từ một công cụ giám sát hệ thống yêu thích – Dstat. Đây là đầu ra:

Hướng dẫn bắt đầu sử dụng awk
nhấp để phóng to

Đây là đầu ra lý tưởng cho awk xử lý. awk rất giỏi với nội dung phân tách bằng dấu phẩy hoặc tab. Bạn sẽ thấy tại sao sớm. Vậy hãy tạo dữ liệu tương tự hoặc copy/ví dụ trên vào file giả tên kiểu test.txt. Mở cửa sổ terminal trên máy Linux. Gần như mọi phiên bản Linux đều có sẵn awk. Nếu bạn tìm thấy phiên bản nào không có nó vì lý do nào, hãy cài đặt. Trên cửa sổ terminal gõ từ thư mục chứa test.txt –

# awk {‘print’} test.txt

Đầu ra nên chứa toàn bộ nội dung file văn bản. Có gì vui ở đó.

Bây giờ xem cách chọn một cột và chỉ in cột đó. Thực thi lệnh sau:

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

Bây giờ chúng ta yêu cầu awk in chỉ cột đầu tiên của file văn bản. Nó sẽ tự động nhận ra file phân tách bằng tab và in chỉ cột đầu. Bạn sẽ thấy tương tự này:

—-total-cpu-usage—-
usr
5
13
8
0
1
1
1
0
1
1

Bạn làm tương tự cho bất kỳ cột nào. Nếu muốn awk in cột thứ ba, thay lệnh trên thành:

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

Bạn cũng có thể yêu cầu awk in nhiều cột. Nếu muốn in cột 1, 3, và 7, thêm chúng vào lệnh phân tách bằng dấu phẩy.

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

sẽ làm được:

—-total-cpu-usage—- -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ó file phức tạp hơn như /etc/passwd nơi dữ liệu phân tách bằng dấu hai chấm thay vì khoảng trắng hoặc tab, awk không tự nhận ra. Trong trường hợp đó bạn có thể cung cấp phân tách đúng cho awk. Dùng lệnh như sau in cột thứ hai của file:

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

Lệnh này cho đầu ra tên người dùng của tất cả user trên hệ thống:

apple
mango
banana
watermelon
kiwi
orange

Bạn làm tương tự với bất kỳ loại phân tách nào. Bạn cũng có thể dùng awk phân tích file log. Ví dụ, nếu muốn xem tất cả địa chỉ IP và URL web liên quan đã được truy cập trên web server, dùng awk phân tích access log:

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

199.63.142.250 /2008/10/my-5-favourite-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/bicycle-rental/
173.234.38.110 /wp-comments-post.php

Dùng phân tích như vậy bạn có thể biết ai đang truy cập web nhiều, có thể đang đánh cắp thông tin. Bạn cũng có thể sắp xếp thông tin. Giả sử muốn biết một IP cụ thể truy cập web bao nhiêu lần:

# awk ‘$9 == 200 { print $1}’ access.log | sort | uniq -c | sort -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