AWK - Ví dụ cơ bản
Chương này mô tả một số lệnh AWK hữu ích và các ví dụ thích hợp của chúng. Xem xét một tệp văn bảnmarks.txt sẽ được xử lý với nội dung sau:
1) Amit Physics 80
2) Rahul Maths 90
3) Shyam Biology 87
4) Kedar English 85
5) Hari History 89
In cột hoặc trường
Bạn có thể hướng dẫn AWK chỉ in các cột nhất định từ trường đầu vào. Ví dụ sau đây chứng minh điều này -
Thí dụ
[jerry]$ awk '{print $3 "\t" $4}' marks.txt
Khi thực thi mã này, bạn nhận được kết quả sau:
Đầu ra
Physics 80
Maths 90
Biology 87
English 85
History 89
Trong tập tin marks.txt, cột thứ ba chứa tên môn học và cột thứ tư chứa các điểm đạt được trong một môn học cụ thể. Hãy để chúng tôi in hai cột này bằng lệnh in AWK. Trong ví dụ trên,$3 and $4 đại diện cho các trường thứ ba và thứ tư tương ứng từ bản ghi đầu vào.
In tất cả các dòng
Theo mặc định, AWK in tất cả các dòng phù hợp với mẫu.
Thí dụ
[jerry]$ awk '/a/ {print $0}' marks.txt
Khi thực thi mã này, bạn nhận được kết quả sau:
Đầu ra
2) Rahul Maths 90
3) Shyam Biology 87
4) Kedar English 85
5) Hari History 89
Trong ví dụ trên, chúng tôi đang tìm kiếm mẫu biểu mẫu a. Khi khớp mẫu thành công, nó sẽ thực hiện một lệnh từ khối nội dung. Trong trường hợp không có khối nội dung - hành động mặc định được thực hiện là in bản ghi. Do đó, lệnh sau tạo ra cùng một kết quả:
Thí dụ
[jerry]$ awk '/a/' marks.txt
In các cột theo mẫu
Khi khớp mẫu thành công, AWK in toàn bộ bản ghi theo mặc định. Nhưng bạn có thể hướng dẫn AWK chỉ in một số trường nhất định. Ví dụ: ví dụ sau sẽ in trường thứ ba và thứ tư khi đối sánh mẫu thành công.
Thí dụ
[jerry]$ awk '/a/ {print $3 "\t" $4}' marks.txt
Khi thực thi mã này, bạn nhận được kết quả sau:
Đầu ra
Maths 90
Biology 87
English 85
History 89
In cột theo thứ tự bất kỳ
Bạn có thể in các cột theo bất kỳ thứ tự nào. Ví dụ, ví dụ sau sẽ in cột thứ tư theo sau là cột thứ ba.
Thí dụ
[jerry]$ awk '/a/ {print $4 "\t" $3}' marks.txt
Khi thực thi đoạn mã trên, bạn nhận được kết quả sau:
Đầu ra
90 Maths
87 Biology
85 English
89 History
Đếm và in mẫu phù hợp
Hãy để chúng tôi xem một ví dụ trong đó bạn có thể đếm và in số dòng mà đối sánh mẫu đã thành công.
Thí dụ
[jerry]$ awk '/a/{++cnt} END {print "Count = ", cnt}' marks.txt
Khi thực thi mã này, bạn nhận được kết quả sau:
Đầu ra
Count = 4
Trong ví dụ này, chúng tôi tăng giá trị của bộ đếm khi khớp mẫu thành công và chúng tôi in giá trị này trong khối END. Lưu ý rằng không giống như các ngôn ngữ lập trình khác, không cần phải khai báo một biến trước khi sử dụng nó.
In dòng với hơn 18 ký tự
Hãy để chúng tôi chỉ in những dòng có hơn 18 ký tự.
Thí dụ
[jerry]$ awk 'length($0) > 18' marks.txt
Khi thực thi mã này, bạn nhận được kết quả sau:
Đầu ra
3) Shyam Biology 87
4) Kedar English 85
AWK cung cấp một length hàm trả về độ dài của chuỗi. $0biến lưu trữ toàn bộ dòng và trong trường hợp không có khối nội dung, hành động mặc định được thực hiện, tức là hành động in. Do đó, nếu một dòng có nhiều hơn 18 ký tự, thì kết quả so sánh là true và dòng sẽ được in.