Hướng dẫn này chỉ cho bạn cách sử dụng lệnh awk trong Linux, với nhiều ví dụ hữu ích hàng ngày.
AWK là một công cụ và ngôn ngữ để tìm kiếm và thao tác văn bản có sẵn cho Hệ điều hành Linux.
awk lệnh và các tệp tìm kiếm ngôn ngữ kịch bản được liên kết cho văn bản được xác định bởi mẫu và thực hiện một hành động cụ thể trên văn bản phù hợp với mẫu.
awk là một công cụ hữu ích để trích xuất dữ liệu và xây dựng báo cáo từ các tệp văn bản lớn hoặc số lượng lớn tệp văn bản - ví dụ:nhật ký xử lý hoặc đầu ra của thiết bị ghi dữ liệu như đầu dò nhiệt độ, đã thu thập nhiều dữ liệu trong một khoảng thời gian . Nó cũng có thể được sử dụng trên đầu ra từ các truy vấn cơ sở dữ liệu.
Không cần cài đặt awk; nó đã có sẵn trên Hệ thống Linux của bạn.
Cú pháp awk
Cú pháp để sử dụng awk lệnh trong terminal như sau:
awk [PROGRAM] [INPUT FILES]
Lưu ý rằng:
- [CHƯƠNG TRÌNH] là mẫu tìm kiếm và các hành động cần thực hiện - đó là chương trình bạn muốn awk chạy trên các tệp được cung cấp
- Nó cũng có thể được cung cấp dưới dạng tệp văn bản thay vì nội tuyến bằng cách sử dụng -f tùy chọn
- [INPUT FILES] là các tệp bạn muốn làm việc trên đó - nó có thể là một số tệp được phân tách bằng dấu cách hoặc đường dẫn đến một thư mục hoặc một mẫu tệp để khớp
- Nếu không có tệp đầu vào nào được chỉ định, awk sẽ hoạt động trên đầu ra được định hướng từ một lệnh khác
Tùy chọn awk
Các tùy chọn sau có thể được cung cấp cho lệnh awk:
-f chương trình-tệp | Văn bản chương trình được đọc từ tệp thay vì từ dòng lệnh. Nhiều tùy chọn -f được chấp nhận. |
-F giá trị | Đặt dấu phân tách trường, FS, thành giá trị. |
-v var =value | Gán giá trị cho biến chương trình var. |
Để có thêm các tùy chọn triển khai cụ thể cho phiên bản awk của bạn, bạn có thể kiểm tra hướng dẫn sử dụng bằng cách chạy:
man awk
Hành động và biến chương trình
Chương trình bạn cung cấp cho awk sẽ xác định tác dụng của nó đối với các tệp văn bản mà bạn cung cấp cho nó. Chương trình awk có định dạng sau:
CONDITION { ACTION } CONDITION { ACTION } ...
Ở đâu ĐIỀU KIỆN là mẫu văn bản để đối sánh và ACTION là hành động thực hiện trên văn bản phù hợp. Bạn có thể có nhiều điều kiện và hành động tùy ý.
Hành động
Các hành động được cung cấp là các lệnh có thể bao gồm tính toán, biến và gọi hàm. Một số chức năng tích hợp dành riêng cho việc triển khai, vì vậy tốt nhất bạn nên kiểm tra hướng dẫn sử dụng của mình để biết những chức năng này.
Hồ sơ
awk thường coi mỗi dòng mới trong tệp văn bản là một bản ghi trừ khi được chỉ định khác qua OPTIONS .
Các trường
awk sẽ sử dụng khoảng trắng (dấu cách, tab) để biểu thị các trường trong một hồ sơ trừ khi được chỉ định khác qua OPTIONS .
Các biến
awk có nhiều biến tích hợp mà bạn có thể sử dụng mà không cần phải tự xác định chúng, bao gồm một số trường hợp phổ biến:
Biến | Ý nghĩa |
---|---|
$ 0 | Đại diện cho toàn bộ bản ghi |
$ 1, $ 2, $ 3… | Biến trường - giữ văn bản / giá trị cho các trường văn bản riêng lẻ trong một bản ghi |
NR / N umber của R sinh thái | Số lượng bản ghi đầu vào hiện tại được đọc từ tất cả các tệp |
FNR / F ile N umber của R sinh thái | Đếm số lượng bản ghi đầu vào hiện tại đã đọc trong tệp hiện tại - Tự động đặt lại về 0 mỗi khi khởi động tệp mới |
NF / N umber của F ields | Số lượng trường trong bản ghi đầu vào hiện tại - Trường cuối cùng trong bản ghi có thể được tham chiếu bằng cách sử dụng $ NF, trường thứ 2 đến cuối cùng bằng cách sử dụng $ (NF-1), v.v. |
FILENAME | Tên của tệp đầu vào hiện tại |
FS / F ield S dấu phân cách | (Các) ký tự được sử dụng để phân tách các trường trong một bản ghi. Theo mặc định, bao gồm bất kỳ khoảng trắng và ký tự tab nào |
RS / R ecord S dấu phân cách | (Các) ký tự được sử dụng để phân tách các bản ghi trong một tệp. Dòng mới theo mặc định |
OFS / O utput F ield S dấu phân cách | (Các) ký tự được sử dụng để phân tách các trường trong đầu ra Awk. Mặc định là một không gian duy nhất |
ORS / O utput R ecord S dấu phân cách | (Các) ký tự được sử dụng để phân tách các trường trong đầu ra Awk. Mặc định là một dòng mới |
OFMT / O utput F hoặc M a T | Định dạng cho đầu ra số - Định dạng mặc định là “% .6g” |
Ví dụ sử dụng awk
Đối với những ví dụ này, chúng tôi sẽ làm việc trên một tệp văn bản duy nhất có tên là flowers.txt , chứa văn bản sau:
red rose yellow daffodil pink flamingo white rose blue iris white lily red peony yellow orchid purple foxglove
In nội dung tệp
Lệnh awk sau đây sẽ xuất nội dung của tệp đến thiết bị đầu cuối bằng cách sử dụng awk print chức năng:
awk '{print}' flowers.txt
In số bản ghi (dòng) trong tệp
awk 'END { print NR }' sample.txt
Ví dụ này sẽ xuất ra số dòng trong tệp:
9
Tìm kiếm văn bản trong tệp bằng biểu thức chính quy
Lệnh sau sẽ xuất các dòng trong tệp chỉ mô tả các loại hoa hồng :
awk '/rose/' flowers.txt
Lưu ý rằng REGEX Cú pháp (Biểu thức chính quy) được sử dụng để xác định văn bản cần tìm kiếm.
Lệnh này sẽ xuất ra:
red rose white rose
Thêm Regex
awk '/^p/' flowers.txt
Lệnh này sẽ chỉ xuất các bản ghi bắt đầu bằng p :
pink flamingo purple foxglove
Sử dụng các biến trường
Bằng cách sử dụng Biến trường , bạn có thể xuất ra chỉ trường đầu tiên cho các bản ghi bắt đầu bằng p :
awk '/^p/ {print $1;}' flowers.txt
Cái nào sẽ xuất ra:
pink purple
Xử lý đầu ra từ các chương trình khác
Bạn có thể tẩu xuất từ các chương trình shell Linux khác sang awk để xử lý. Ví dụ này lấy đầu ra từ ls -l lệnh liệt kê nội dung của thư mục hiện tại và trả về nội dung của 5 trường (kích thước của tệp):
ls -l | awk '{print $5}'
Điều này sẽ xuất ra một cái gì đó như:
3104 3072 224 256
… (Tùy thuộc vào số lượng tệp trong thư mục hiện tại và dung lượng của chúng).
Sử dụng các biến tích hợp
awk '{print NR "-" $2 }' flowers.txt
Lệnh này sẽ in số bản ghi hiện tại (số dòng tệp) theo sau là trường thứ hai - tên của loài hoa:
1-red rose 2-yellow daffodil 3-pink flamingo 4-white rose 5-blue iris 6-white lily 7-red peony 8-yellow orchid 9-purple foxglove
Kết hợp các hành động
Điều kiện và hành động có thể được kết hợp bằng cách sử dụng && Lệnh này sẽ in tất cả các bản ghi có trường đầu tiên chứa văn bản red và trường thứ hai có ít hơn 5 ký tự :
awk '$1 ~ /red/ && length($NF) < 5 { print }' flowers.txt
Lưu ý:
- Việc sử dụng $ NF để chuyển đến trường thứ hai thay thế cho việc sử dụng $ 2 - có thể vì đây là trường cuối cùng và do đó bằng với NF (Số trường)
- Chiều dài () hàm được sử dụng để tính độ dài của trường
Vì vậy, nó trả về một bản ghi phù hợp duy nhất từ tệp ví dụ:
red rose
Kết luận
awk được bao gồm khá nhiều trên toàn cầu với Linux vì một lý do - đó là một công cụ chủ yếu để tìm kiếm và xử lý văn bản, bạn có thể sử dụng để nhanh chóng tìm kiếm các mục nhập nhật ký nếu có sự cố trên hệ thống của bạn hoặc để xử lý dữ liệu đã thu thập được để sử dụng cho nghiên cứu.
Nếu bạn đã từng cố gắng làm bất cứ điều gì ngoài việc tìm / thay thế đơn giản trên một bộ sưu tập lớn các tệp văn bản, bạn sẽ biết giá trị của việc có thể thực hiện thay thế hoặc cập nhật cụ thể cho tất cả văn bản của bạn theo chương trình mà không cần phải chạy các lệnh tìm / thay thế riêng lẻ.
Xem các Mẹo Linux khác của chúng tôi!