20 ví dụ awk

20 Awk Examples



Nhiều công cụ tiện ích tồn tại trong hệ điều hành Linux để tìm kiếm và tạo báo cáo từ dữ liệu văn bản hoặc tệp. Người dùng có thể dễ dàng thực hiện nhiều kiểu tìm kiếm, thay thế và báo cáo các tác vụ tạo bằng cách sử dụng các lệnh awk, grep và sed. awk không chỉ là một lệnh. Nó là một ngôn ngữ kịch bản có thể được sử dụng từ cả tập tin terminal và awk. Nó hỗ trợ biến, câu lệnh điều kiện, mảng, vòng lặp, v.v. giống như các ngôn ngữ kịch bản khác. Nó có thể đọc bất kỳ nội dung tệp nào từng dòng và phân tách các trường hoặc cột dựa trên một dấu phân cách cụ thể. Nó cũng hỗ trợ biểu thức chính quy để tìm kiếm chuỗi cụ thể trong nội dung văn bản hoặc tệp và thực hiện các hành động nếu có bất kỳ kết quả phù hợp nào. Cách bạn có thể sử dụng lệnh và tập lệnh awk được hiển thị trong hướng dẫn này bằng cách sử dụng 20 ví dụ hữu ích.

Nội dung:

  1. awk với printf
  2. awk để phân chia trên không gian trắng
  3. awk để thay đổi dấu phân cách
  4. awk với dữ liệu được phân cách bằng tab
  5. awk với dữ liệu csv
  6. awk regex
  7. awk regex không phân biệt chữ hoa chữ thường
  8. awk với biến nf (số trường)
  9. hàm awk gensub ()
  10. awk với hàm rand ()
  11. chức năng do người dùng xác định awk
  12. awk nếu
  13. biến awk
  14. mảng awk
  15. vòng lặp awk
  16. awk để in cột đầu tiên
  17. awk để in cột cuối cùng
  18. awk với grep
  19. awk với tệp kịch bản bash
  20. awk với sed

Sử dụng awk với printf

printf () hàm được sử dụng để định dạng bất kỳ đầu ra nào trong hầu hết các ngôn ngữ lập trình. Chức năng này có thể được sử dụng với awk lệnh để tạo các loại đầu ra được định dạng khác nhau. lệnh awk chủ yếu được sử dụng cho bất kỳ tệp văn bản nào. Tạo một tệp văn bản có tên nhân viên.txt với nội dung được cung cấp bên dưới trong đó các trường được phân tách bằng tab (‘ t’).







nhân viên.txt



1001 John sena 40000
1002 Jafar Iqbal 60000
1003 Meher Nigar 30000
Chương 1004 Jonny gan 70000

Lệnh awk sau sẽ đọc dữ liệu từ nhân viên.txt từng dòng và in tệp đầu tiên được nộp sau khi định dạng. Ở đây, % 10s n có nghĩa là đầu ra sẽ dài 10 ký tự. Nếu giá trị của đầu ra nhỏ hơn 10 ký tự thì khoảng trắng sẽ được thêm vào phía trước giá trị.



$ awk'{printf'% 10s ', $ 1}'Nhân viên.txt

Đầu ra:





Đi tới Nội dung



awk để phân chia trên không gian trắng

Dấu tách trường hoặc từ mặc định để tách bất kỳ văn bản nào là khoảng trắng. Lệnh awk có thể nhận giá trị văn bản làm đầu vào theo nhiều cách khác nhau. Văn bản đầu vào được chuyển từ quăng đi lệnh trong ví dụ sau. Văn bản, ‘ Tôi thích lập trình 'Sẽ được phân tách bằng dấu phân tách mặc định, không gian , và từ thứ ba sẽ được in dưới dạng đầu ra.

$quăng đi 'Tôi thích lập trình' | awk '{in $ 3}'

Đầu ra:

Đi tới Nội dung

awk để thay đổi dấu phân cách

Lệnh awk có thể được sử dụng để thay đổi dấu phân cách cho bất kỳ nội dung tệp nào. Giả sử, bạn có một tệp văn bản có tên phone.txt với nội dung sau, trong đó ‘:’ được sử dụng làm dấu phân tách trường của nội dung tệp.

phone.txt

+123: 334: 889: 778
+880: 1855: 456: 907
+9: 7777: 38644: 808

Chạy lệnh awk sau để thay đổi dấu phân cách, ‘:’ qua ‘-’ vào nội dung của tệp, phone.txt .

$ cat phone.txt
$ awk '$ 1 = $ 1' FS = ':' OFS = '-' phone.txt

Đầu ra:

Đi tới Nội dung

awk với dữ liệu được phân cách bằng tab

Lệnh awk có nhiều biến tích hợp được sử dụng để đọc văn bản theo những cách khác nhau. Hai trong số họ là FSOFS . FS là dấu phân tách trường đầu vào và OFS là các biến phân tách trường đầu ra. Việc sử dụng các biến này được trình bày trong phần này. Tạo một chuyển hướng tệp được phân tách có tên input.txt với nội dung sau để kiểm tra việc sử dụng FSOFS biến.

Input.txt

Ngôn ngữ kịch bản phía máy khách
Ngôn ngữ kịch bản phía máy chủ
Máy chủ cơ sở dữ liệu
Máy chủ web

Sử dụng biến FS với tab

Lệnh sau sẽ chia từng dòng của input.txt dựa trên tab (‘ t’) và in trường đầu tiên của mỗi dòng.

$awk '{in $ 1}' FS='NS'input.txt

Đầu ra:

Sử dụng biến OFS với tab

Lệnh awk sau sẽ in 9NS5NS Lĩnh vực ‘Ls -l’ đầu ra lệnh với dấu phân cách tab sau khi in tiêu đề cột TênKích thước . Ở đây, OFS biến được sử dụng để định dạng đầu ra theo tab.

$ls -NS
$ls -NS | awk -v OFS='NS' 'BEGIN {printf'% s t% s n ',' Tên ',' Kích thước '} {print $ 9, $ 5}'

Đầu ra:

Đi tới Nội dung

awk với dữ liệu CSV

Nội dung của bất kỳ tệp CSV nào có thể được phân tích cú pháp theo nhiều cách bằng cách sử dụng lệnh awk. Tạo tệp CSV có tên ‘ customer.csv ’Với nội dung sau để áp dụng lệnh awk.

customer.txt

Id, Tên, email, điện thoại
1, Sophia, [email được bảo vệ], (862) 478-7263
2, Amelia, [email được bảo vệ], (530) 764-8000
3, Emma, ​​[email được bảo vệ], (542) 986-2390

Đọc một trường của tệp CSV

'-NS' tùy chọn được sử dụng với lệnh awk để đặt dấu phân cách để tách từng dòng của tệp. Lệnh awk sau sẽ in Tên lĩnh vực the customer.csv tập tin.

$con mèocustomer.csv
$awk -NS ',' '{in $ 2}'customer.csv

Đầu ra:

Đọc nhiều trường bằng cách kết hợp với văn bản khác

Lệnh sau sẽ in ra ba trường customer.csv bằng cách kết hợp văn bản tiêu đề, Tên, Email và Điện thoại . Dòng đầu tiên của customer.csv tệp chứa tiêu đề của mỗi trường. KHÔNG biến chứa số dòng của tệp khi lệnh awk phân tích cú pháp tệp. Trong ví dụ này, NR biến được sử dụng để bỏ qua dòng đầu tiên của tệp. Đầu ra sẽ hiển thị 2NS, 3rdvà 4NStrường của tất cả các dòng ngoại trừ dòng đầu tiên.

$awk -NS ',' 'NR> 1 {print' Tên: '$ 2', Email: '$ 3', Điện thoại: '$ 4}'customer.csv

Đầu ra:

Đọc tệp CSV bằng tập lệnh awk

tập lệnh awk có thể được thực thi bằng cách chạy tệp awk. Cách bạn có thể tạo tệp awk và chạy tệp được hiển thị trong ví dụ này. Tạo một tệp có tên awkcsv.awk với đoạn mã sau. BẮT ĐẦU từ khóa được sử dụng trong tập lệnh để thông báo cho lệnh awk thực thi tập lệnh của BẮT ĐẦU phần đầu tiên trước khi thực hiện các nhiệm vụ khác. Tại đây, dấu phân tách trường ( FS ) được sử dụng để xác định dấu phân tách tách và 2NSvà 1NScác trường sẽ được in theo định dạng được sử dụng trong hàm printf ().

awkcsv.awk
BẮT ĐẦU{FS= ','} { printf '% 5s (% s) ',$2,$1}

Chạy awkcsv.awk tập tin với nội dung của the customer.csv tập tin bằng lệnh sau.

$awk -NSawkcsv.awk customer.csv

Đầu ra:

Đi tới Nội dung

awk regex

Biểu thức chính quy là một mẫu được sử dụng để tìm kiếm bất kỳ chuỗi nào trong văn bản. Các loại tác vụ tìm kiếm và thay thế phức tạp khác nhau có thể được thực hiện rất dễ dàng bằng cách sử dụng biểu thức chính quy. Một số cách sử dụng đơn giản của biểu thức chính quy với lệnh awk được trình bày trong phần này.

Nhân vật phù hợpbộ

Lệnh sau sẽ khớp với từ Lừa gạt hoặc bool hoặc Mát mẻ với chuỗi đầu vào và in ra nếu từ đó xuất hiện. Ở đây, Con búp bê sẽ không khớp và không in được.

$printf 'Lừa gạt, kẻ ngốc Mát mẻ Con búp bê bool ' | awk '/ [FbC] ool /'

Đầu ra:

Tìm kiếm chuỗi ở đầu dòng

‘^’ biểu tượng được sử dụng trong biểu thức chính quy để tìm kiếm bất kỳ mẫu nào ở đầu dòng. ‘ Linux ' từ sẽ được tìm kiếm ở đầu mỗi dòng của văn bản trong ví dụ sau. Ở đây, hai dòng bắt đầu bằng văn bản, ‘Linux 'Và hai dòng đó sẽ được hiển thị trong đầu ra.

$quăng đi -Và 'Linux được sử dụng miễn phí Nó là một phần mềm mã nguồn mở LinuxHint là
một trang blog phổ biến '
| awk '/ ^ Linux /'

Đầu ra:

Tìm kiếm chuỗi ở cuối dòng

‘$’ biểu tượng được sử dụng trong biểu thức chính quy để tìm kiếm bất kỳ mẫu nào ở cuối mỗi dòng của văn bản. ‘ Kịch bản Từ 'được tìm kiếm trong ví dụ sau. Ở đây, hai dòng chứa từ, Kịch bản ở cuối dòng.

$quăng đi -Và 'Tập lệnh PHP JavaScript Lập trình trực quan ' | awk '/ Tập lệnh $ /'

Đầu ra:

Tìm kiếm bằng cách bỏ qua bộ ký tự cụ thể

‘^’ biểu tượng cho biết phần bắt đầu của văn bản khi nó được sử dụng trước bất kỳ mẫu chuỗi nào (‘/ ^… /’) hoặc trước bất kỳ bộ ký tự nào được khai báo bởi ^ […] . Nếu ‘^’ ký hiệu được sử dụng bên trong dấu ngoặc thứ ba, [^…] thì bộ ký tự được xác định bên trong dấu ngoặc sẽ bị bỏ qua tại thời điểm tìm kiếm. Lệnh sau sẽ tìm kiếm bất kỳ từ nào không bắt đầu bằng 'NS' nhưng kết thúc bằng ‘ ool '. Mát mẻbool sẽ được in theo mẫu và dữ liệu văn bản.

$ printf 'Lừa gạt, kẻ ngốc Mát mẻ Con búp bê bool ' |awk'/ [^ F] ool /'

Đầu ra:

Đi tới Nội dung

awk regex không phân biệt chữ hoa chữ thường

Theo mặc định, biểu thức chính quy thực hiện tìm kiếm phân biệt chữ hoa chữ thường khi tìm kiếm bất kỳ mẫu nào trong chuỗi. Tìm kiếm không phân biệt chữ hoa chữ thường có thể được thực hiện bằng lệnh awk với biểu thức chính quy. Trong ví dụ sau, tolower () hàm được sử dụng để thực hiện tìm kiếm không phân biệt chữ hoa chữ thường. Ở đây, từ đầu tiên của mỗi dòng của văn bản đầu vào sẽ được chuyển đổi thành chữ thường bằng cách sử dụng tolower () và khớp với mẫu biểu thức chính quy. toupper () cũng có thể được sử dụng cho mục đích này, trong trường hợp này, mẫu phải được xác định bằng tất cả các chữ cái viết hoa. Văn bản được xác định trong ví dụ sau chứa từ tìm kiếm, 'Web 'Trong hai dòng sẽ được in dưới dạng đầu ra.

$quăng đi -Và 'Thiết kế web phát triển web Khuôn khổ ' | awk 'tolower ($ 0) ~ / ^ web /;'

Đầu ra:

Đi tới Nội dung

awk với biến NF (số trường)

NF là một biến tích hợp của lệnh awk được sử dụng để đếm tổng số trường trong mỗi dòng của văn bản đầu vào. Tạo bất kỳ tệp văn bản nào có nhiều dòng và nhiều từ. input.txt tệp được sử dụng ở đây được tạo trong ví dụ trước.

Sử dụng NF từ dòng lệnh

Ở đây, lệnh đầu tiên được sử dụng để hiển thị nội dung của input.txt tệp và lệnh thứ hai được sử dụng để hiển thị tổng số trường trong mỗi dòng của tệp bằng cách sử dụng NF Biến đổi.

$ cat input.txt
$ awk '{print NF}' input.txt

Đầu ra:

Sử dụng NF trong tệp awk

Tạo một tệp awk có tên count.awk với kịch bản được đưa ra bên dưới. Khi tập lệnh này thực thi với bất kỳ dữ liệu văn bản nào thì mỗi nội dung dòng với tổng số trường sẽ được in ra dưới dạng đầu ra.

count.awk

{in $0}
{in'[Tổng số trường:'NF']'}

Chạy tập lệnh bằng lệnh sau.

$awk -NScount.awk input.txt

Đầu ra:

Đi tới Nội dung

hàm awk gensub ()

getub () là một hàm thay thế được sử dụng để tìm kiếm chuỗi dựa trên dấu phân tách hoặc mẫu biểu thức chính quy cụ thể. Chức năng này được định nghĩa trong ‘Gawk’ gói không được cài đặt theo mặc định. Cú pháp cho hàm này được đưa ra dưới đây. Tham số đầu tiên chứa mẫu biểu thức chính quy hoặc dấu phân cách tìm kiếm, tham số thứ hai chứa văn bản thay thế, tham số thứ ba cho biết cách tìm kiếm sẽ được thực hiện và tham số cuối cùng chứa văn bản mà hàm này sẽ được áp dụng.

Cú pháp:

gensub(regexp, thay thế, làm thế nào[, Mục tiêu])

Chạy lệnh sau để cài đặt trố mắt nhìn gói để sử dụng getub () chức năng với lệnh awk.

$ sudo apt-get install gawk

Tạo một tệp văn bản có tên là ‘ salesinfo.txt ’Với nội dung sau để thực hành ví dụ này. Ở đây, các trường được phân tách bằng một tab.

salesinfo.txt

700000 của tôi
800000 của bạn
Tư 750000
Thu 200000
Thứ sáu 430000
Sat 820000

Chạy lệnh sau để đọc các trường số của salesinfo.txt nộp và in ra tổng số tiền bán hàng. Ở đây, tham số thứ ba, ‘G’ cho biết tìm kiếm toàn cầu. Điều đó có nghĩa là mẫu sẽ được tìm kiếm trong toàn bộ nội dung của tệp.

$awk '{x = gensub (' t ',' ',' G ', $ 2); printf x '+'} HẾT {print 0} 'salesinfo.txt| bc -NS

Đầu ra:

Đi tới Nội dung

awk với hàm rand ()

hàng ngang() hàm được sử dụng để tạo bất kỳ số ngẫu nhiên nào lớn hơn 0 và nhỏ hơn 1. Vì vậy, nó sẽ luôn tạo ra một số phân số nhỏ hơn 1. Lệnh sau sẽ tạo một số ngẫu nhiên phân số và nhân giá trị với 10 để nhận được một số lớn hơn 1. Một số phân số có hai chữ số sau dấu thập phân sẽ được in để áp dụng hàm printf (). Nếu bạn chạy lệnh sau nhiều lần thì mỗi lần bạn sẽ nhận được kết quả đầu ra khác nhau.

$awk 'BEGIN {printf' Số là =%. 2f n ', rand () * 10}'

Đầu ra:

Đi tới Nội dung

chức năng do người dùng xác định awk

Tất cả các hàm được sử dụng trong các ví dụ trước là các hàm tích hợp sẵn. Nhưng bạn có thể khai báo một hàm do người dùng xác định trong tập lệnh awk của mình để thực hiện bất kỳ tác vụ cụ thể nào. Giả sử, bạn muốn tạo một hàm tùy chỉnh để tính diện tích hình chữ nhật. Để thực hiện tác vụ này, hãy tạo một tệp có tên là ‘ area.awk 'Với tập lệnh sau. Trong ví dụ này, một hàm do người dùng xác định có tên khu vực() được khai báo trong tập lệnh tính toán diện tích dựa trên các tham số đầu vào và trả về giá trị diện tích. theo hàng lệnh được sử dụng ở đây để lấy đầu vào từ người dùng.

area.awk

# Tính diện tích
hàm sốkhu vực(Chiều cao,chiều rộng){
trở lạiChiều cao*chiều rộng
}

# Bắt đầu thực thi
BẮT ĐẦU{
in'Nhập giá trị của chiều cao:'
getline h< '-'
in'Nhập giá trị của chiều rộng:'
getline w< '-'
in'Khu vực ='khu vực(NS,trong)
}

Chạy tập lệnh.

$awk -NSarea.awk

Đầu ra:

Đi tới Nội dung

awk nếu ví dụ

awk hỗ trợ các câu lệnh điều kiện giống như các ngôn ngữ lập trình tiêu chuẩn khác. Ba loại câu lệnh if được hiển thị trong phần này bằng cách sử dụng ba ví dụ. Tạo một tệp văn bản có tên items.txt với nội dung sau đây.

items.txt

HDD Samsung $ 100
Chuột A4Tech
Máy in HP $ 200

Đơn giản nếu ví dụ :

anh ta sau lệnh sẽ đọc nội dung của items.txt nộp hồ sơ và kiểm tra 3rd giá trị trường trong mỗi dòng. Nếu giá trị trống thì nó sẽ in thông báo lỗi với số dòng.

$awk '{if ($ 3 ==' ') print' Trường giá bị thiếu trong dòng 'NR}'items.txt

Đầu ra:

ví dụ if-else:

Lệnh sau sẽ in giá mặt hàng nếu 3rdtrường tồn tại trong dòng, nếu không, nó sẽ in một thông báo lỗi.

$ awk'{if ($ 3 ==' ') print' Trường giá bị thiếu '
else print 'giá mặt hàng là' $ 3} '
mặt hàng.txt

Đầu ra:

ví dụ if-else-if:

Khi lệnh sau sẽ thực thi từ thiết bị đầu cuối thì nó sẽ nhận đầu vào từ người dùng. Giá trị đầu vào sẽ được so sánh với từng điều kiện if cho đến khi điều kiện là true. Nếu bất kỳ điều kiện nào trở thành true thì nó sẽ in ra điểm tương ứng. Nếu giá trị đầu vào không khớp với bất kỳ điều kiện nào thì nó sẽ không in được.

$awk 'BEGIN {print' Nhập dấu: '
dấu gạch đầu dòng<'-'
if (mark> = 90) print 'A +'
else if (mark> = 80) print 'A'
else if (mark> = 70) print 'B +'
else in 'Fail'} '

Đầu ra:

Đi tới Nội dung

biến awk

Việc khai báo biến awk tương tự như khai báo biến shell. Có một sự khác biệt trong việc đọc giá trị của biến. Ký hiệu ‘$’ được sử dụng với tên biến để biến shell đọc giá trị. Nhưng không cần sử dụng ‘$’ với biến awk để đọc giá trị.

Sử dụng biến đơn giản:

Lệnh sau sẽ khai báo một biến có tên 'Địa điểm' và một giá trị chuỗi được gán cho biến đó. Giá trị của biến được in trong câu lệnh tiếp theo.

$awk 'BEGIN {site =' LinuxHint.com '; trang in} '

Đầu ra:

Sử dụng một biến để truy xuất dữ liệu từ một tệp

Lệnh sau sẽ tìm kiếm từ 'Máy in' Trong tập tin items.txt . Nếu bất kỳ dòng nào của tệp bắt đầu bằng ‘Máy in 'Thì nó sẽ lưu trữ giá trị của 1NS , 2NS3rd trường thành ba biến. Têngiá bán các biến sẽ được in.

$ awk'/ Máy in / {name = $ 1; brand = $ 2; price = $ 3; print' item name = 'name;
print 'item price =' price} '
mặt hàng.txt

Đầu ra:

Đi tới Nội dung

mảng awk

Cả mảng số và mảng liên kết đều có thể được sử dụng trong awk. Khai báo biến mảng trong awk cũng giống như các ngôn ngữ lập trình khác. Một số công dụng của mảng được trình bày trong phần này.

Mảng liên kết:

Chỉ mục của mảng sẽ là bất kỳ chuỗi nào cho mảng kết hợp. Trong ví dụ này, một mảng kết hợp gồm ba phần tử được khai báo và in ra.

$awk 'BẮT ĐẦU {
books ['Web Design'] = 'Học HTML 5';
books ['Web Programming'] = 'PHP and MySQL'
books ['PHP Framework'] = 'Học Laravel 5'
printf '% s n% s n% s n', sách ['Thiết kế web'], sách ['Lập trình web'],
sách ['PHP Framework']} '

Đầu ra:

Mảng số:

Một mảng số gồm ba phần tử được khai báo và in ra bằng cách tách tab.

$ awk'BẮT ĐẦU {
số [0] = 80;
số [1] = 55;
số [2] = 76;

# in phần tử mảng
printf 'Giá trị mảng:% dNS%NSNS%NS ', số [0], số [1], số [2]; } '

Đầu ra:

Đi tới Nội dung

vòng lặp awk

Ba loại vòng lặp được hỗ trợ bởi awk. Việc sử dụng các vòng lặp này được hiển thị ở đây bằng cách sử dụng ba ví dụ.

Trong khi lặp lại:

Vòng lặp while được sử dụng trong lệnh sau sẽ lặp lại 5 lần và thoát khỏi câu lệnh lặp for break.

$ awk 'BẮT ĐẦU {n = 1; while (n 5) nghỉ; in n; n ++}} '

Đầu ra:

Vòng lặp for:

Vòng lặp for được sử dụng trong lệnh awk sau đây sẽ tính tổng từ 1 đến 10 và in ra giá trị.

$awk 'BEGIN {sum = 0; cho (n = 1; n<= 10; n++) sum=sum+n; print sum }'

Đầu ra:

Vòng lặp Do-while:

vòng lặp do-while của lệnh sau sẽ in tất cả các số chẵn từ 10 đến 5.

$awk 'BEGIN {counter = 10; do {if (counter% 2 == 0) print counter; quầy tính tiền-- }
trong khi (bộ đếm> 5)} '

Đầu ra:

Đi tới Nội dung

awk để in cột đầu tiên

Cột đầu tiên của bất kỳ tệp nào có thể được in bằng cách sử dụng biến $ 1 trong awk. Nhưng nếu giá trị của cột đầu tiên chứa nhiều từ thì chỉ từ đầu tiên của cột đầu tiên được in. Bằng cách sử dụng một dấu phân cách cụ thể, cột đầu tiên có thể được in đúng cách. Tạo một tệp văn bản có tên student.txt với nội dung sau đây. Ở đây, cột đầu tiên chứa văn bản của hai từ.

Student.txt

Kaniz Fatema 30NSlô hàng
Abir Hossain 35NSlô hàng
John Abraham 40NSlô hàng

Chạy lệnh awk mà không có bất kỳ dấu phân cách nào. Phần đầu tiên của cột đầu tiên sẽ được in.

$awk '{in $ 1}'student.txt

Chạy lệnh awk với dấu phân cách sau. Phần đầy đủ của cột đầu tiên sẽ được in.

$awk -NS '\ NS' '{in $ 1}'student.txt

Đầu ra:

Đi tới Nội dung

awk để in cột cuối cùng

$ (NF) biến có thể được sử dụng để in cột cuối cùng của bất kỳ tệp nào. Các lệnh awk sau sẽ in phần cuối cùng và phần đầy đủ của cột cuối cùng của the student.txt tập tin.

$awk '{print $ (NF)}'student.txt
$awk -NS '\ NS' '{print $ (NF)}'student.txt

Đầu ra:

Đi tới Nội dung

awk với grep

grep là một lệnh hữu ích khác của Linux để tìm kiếm nội dung trong tệp dựa trên bất kỳ biểu thức chính quy nào. Cách cả hai lệnh awk và grep có thể được sử dụng cùng nhau được hiển thị trong ví dụ sau. nắm chặt lệnh được sử dụng để tìm kiếm thông tin của id nhân viên, ‘ 1002 ' từ nhân viên.txt tập tin. Đầu ra của lệnh grep sẽ được gửi đến awk dưới dạng dữ liệu đầu vào. 5% tiền thưởng sẽ được tính và in dựa trên mức lương của id nhân viên, ‘ 1002 ' bằng lệnh awk.

$con mèonhân viên.txt
$nắm chặt '1002'nhân viên.txt| awk -NS 'NS' '{print $ 2' sẽ nhận được $ '($ 3 * 5) / 100' tiền thưởng '}'

Đầu ra:

Đi tới Nội dung

awk với tệp BASH

Giống như các lệnh Linux khác, lệnh awk cũng có thể được sử dụng trong một tập lệnh BASH. Tạo một tệp văn bản có tên khách hàng.txt với nội dung sau đây. Mỗi dòng của tệp này chứa thông tin về bốn trường. Đây là ID, Tên, địa chỉ và số điện thoại di động của khách hàng được phân tách bằng ‘/ '.

khách hàng.txt

AL4934 / Charles M Brunner / 4838 Beeghley Street, Huntsville, Alabama / 256-671-7942
CA5455 / Virginia S Mota / 930 Đường Bassel, VALLECITO, California / 415-679-5908
IL4855 / Ann A Neale / 1932 Patterson Fork Road, Chicago, Illinois / 773-550-5107

Tạo một tệp bash có tên item_search.bash với tập lệnh sau. Theo tập lệnh này, giá trị trạng thái sẽ được lấy từ người dùng và được tìm kiếm trong khách hàng.txt nộp hồ sơ bởi nắm chặt và được chuyển đến lệnh awk làm đầu vào. Lệnh Awk sẽ đọc 2NS4NS các trường của mỗi dòng. Nếu giá trị đầu vào khớp với bất kỳ giá trị trạng thái nào của khách hàng.txt tệp sau đó nó sẽ in của khách hàng TênSố điện thoại , nếu không, nó sẽ in thông báo Không tìm thấy khách hàng .

item_search.bash

#! / bin / bash
quăng đi 'Nhập tên tiểu bang:'
đọctiểu bang
khách hàng=``nắm chặt '$ bang'khách hàng.txt| awk -NS '/' '{print' Tên Khách hàng: '$ 2,',
Số điện thoại di động: '$ 4}'
``
nếu như [ 'khách hàng $' !='' ];sau đó
quăng đi khách hàng $
khác
quăng đi 'Không tìm thấy khách hàng'
thì là ở

Chạy các lệnh sau để hiển thị kết quả đầu ra.

$con mèokhách hàng.txt
$bấu víuitem_search.bash

Đầu ra:

Đi tới Nội dung

awk với sed

Một công cụ tìm kiếm hữu ích khác của Linux là quyến rũ . Lệnh này có thể được sử dụng cho cả việc tìm kiếm và thay thế văn bản của bất kỳ tệp nào. Ví dụ sau cho thấy việc sử dụng lệnh awk với quyến rũ chỉ huy. Tại đây, lệnh sed sẽ tìm kiếm tất cả các tên nhân viên bắt đầu bằng ‘ NS 'Và chuyển tới lệnh awk làm đầu vào. awk sẽ in nhân viên TênTÔI sau khi định dạng.

$con mèonhân viên.txt
$quyến rũ -n '/ J / p'nhân viên.txt| awk -NS 'NS' '{printf'% s (% s) n ', $ 2, $ 1}'

Đầu ra:

Đi tới Nội dung

Phần kết luận:

Bạn có thể sử dụng lệnh awk để tạo các loại báo cáo khác nhau dựa trên bất kỳ dữ liệu dạng bảng hoặc phân tách nào sau khi lọc dữ liệu đúng cách. Hy vọng, bạn sẽ có thể tìm hiểu cách thức hoạt động của lệnh awk sau khi thực hành các ví dụ được hiển thị trong hướng dẫn này.