Thứ Bảy, 29 tháng 7, 2023

Cách sử dụng Awk để lọc dữ liệu bằng cách sử dụng ký tự $

Trong bài này mình sẽ hướng dẫn sử dụng Awk trong Linux để in ra thông tin các trường và cột của một file trên Linux.

Có thể trong một bảng bạn chỉ cần lấy thông tin của 2 hoặc 3 cột, và awk có một tính năng giúp bạn làm được điều đó. Hãy cùng mình bắt đầu vào tutorial ngày hôm nay nha.

Nếu bạn đã quen thuộc với Linux hay bash shell thì bạn có thể bạn đã biết internal field separator (IFS). Nếu không thì đơn giản bạn có thể hiểu IFS trong awk được xem như là tab hoặc là khoảng cách (space) và đó cũng chính là khoảng ngăn cách giữa các ký tự, đây là cách hoạt động của việc chia tách trường trong awk.

Mục lục

  • 1. Ví dụ 1
  • 2. Ví dụ 2

1. Ví dụ 1

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

Bài viết này được đăng tại [free tuts .net]

awk1 png

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

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

awk2 png

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.

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

awk3 png

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

awk4 png

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

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

awk5 png

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.

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

awk6 png

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.

=============================
* KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE trực tiếp từ tôi giúp bạn bước đầu trở thành những chuyên gia DBA, đủ kinh nghiệm đi thi chứng chỉ OA/OCP, đặc biệt là rất nhiều kinh nghiệm, bí kíp thực chiến trên các hệ thống Core tại VN chỉ sau 1 khoá học.
* CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
* Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile/Zalo: 0902912888
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: https://www.youtube.com/@binhguru
👨 Tiktok: https://www.tiktok.com/@binhguru
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhguru
👨 Podcast: https://www.podbean.com/pu/pbblog-eskre-5f82d6
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội

=============================
oracle tutorial, học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,sql tutorial, khóa học pl/sql tutorial, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail,oracle RAC, ASM, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, postgresql tutorial, mysql tutorial, mariadb tutorial, ms sql server tutorial, nosql, mongodb tutorial, oci, cloud, middleware tutorial, hoc solaris tutorial, hoc linux tutorial, hoc aix tutorial, unix tutorial, securecrt, xshell, mobaxterm, putty

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master