Hướng dẫn cách sử dụng lệnh awk trong Linux để lọc dữ liệu

1. Ví dụ 1

Mình có một file demo1.txt như sau:

Hướng dẫn cách sử dụng lệnh awk trong Linux để lọc dữ liệu (1)

Mình sẽ in ra 3 trường 1, 2 và 3 bằng cách dùng bằng awk như sau:

awk '//{print $1 $2 $3 }' demo1.txt

Hướng dẫn cách sử dụng lệnh awk trong Linux để lọc dữ liệu (2)

Và bạn có thể thêm lần lượt $4 $5 để lấy thêm trường, mỗi trường đều cách nhau bằng khoảng cách hoặc là một tab và phân chia nhau rõ ràng.

Mình tóm tắt lại 1 chút:

  • Trường 1 là William được truy cập vào khi sử dụng $1
  • Trường 2 là Henry được truy cập vào khi sử dụng $2
  • Trường 3 là “Bill" được truy cập khi sử dụng $3
  • Lần lượt mình có thể sử dụng $4 $5 để truy cập tiếp theo

Như bạn thấy, khi mình in dữ liệu ra thì không có khoảng cách và đó chính là cách in mặc định của awk.

Bạn có thể thêm dấu phẩy ( , ) ở mỗi trường để hiển thị một cách rõ ràng hơn.

awk '//{print $1, $2, $3; }' demo1.txt

Hướng dẫn cách sử dụng lệnh awk trong Linux để lọc dữ liệu (3)

Một chú ý quan trọng và luôn luôn phải ghị nhớ là cách sử dụng ký tự đô la ( $ ) trong awk sẽ khác cách sử dụng trong shell script.

Trong shell scripting thì ($) được sử dụng để truy cập giá trị của biến. Trong khi đó awk chỉ sử dụng để truy cập nội dung của một trường nhưng không được sử dụng để truy cập giá trị của một biến.

2. Ví dụ 2

Tiếp tục làm thêm một ví dụ nữa để bạn hiểu rõ hơn nha.

Mình có file demo2.txt

Hướng dẫn cách sử dụng lệnh awk trong Linux để lọc dữ liệu (4)

Mình ví dụ ở đây có rất nhiều trường nhưng bạn chỉ quan tâm là nó tên là gì và giá bao nhiêu, những trường khác bạn không quan tâm thì tại sao bạn lại cần hiển thị đúng không? Và đây là giải pháp

awk '//{print $2, $3 }' demo2.txt

Hướng dẫn cách sử dụng lệnh awk trong Linux để lọc dữ liệu (5)

Thông tin hiển thị ra đã khá ok nhưng cũng chưa được rõ lắm. Bây giờ bạn có thể sử dụng awk và thêm vài thông số như sau.

awk '//{printf "%-20s %s\n",$2, $3 }' demo2.txt

Hướng dẫn cách sử dụng lệnh awk trong Linux để lọc dữ liệu (6)

Khá xịn phải không nào :)

Lệnh printf là lệnh giúp bạn giúp bạn format lại định dạng hiển thị dữ liệu theo một cách riêng nào đó.

Các bạn có thể thực hành bằng cách tải các file trong link github sau: https://github.com/AnTienTL/awk-learning

Lời kết: Chỉnh sửa trường là điều rất quan trọng khi sử dụng awk để lọc những đoạn văn bản, giúp loại bỏ những thông tin dư thừa, Và một lần nữa mình muốn nhấn mạnh rằng cách sử dụng ( $ ) trong awk thì sẽ luôn khác cách sử dụng ( $ ) trong shell scripting.

Chúc bạn sớm thành thạo cách sử dụng lệnh awk trong Linux!

Nguồn: freetuts

Mọi người cùng tìm kiếm: awk, awk trong linux, awk linux, awk -v