Skip to main content

[CCGU] awk - pattern scanning and text processing language

Tiếp tục loạt bài viết CCGU, tớ sẽ giới thiệu 2 công cụ cực mạnh để xử lý text là sed và awk.
sed và awk đều là core utility của các hệ điều hành UNIX, Linux. Chúng vừa là tên 1 chương trình, vừa là tên 1 ngôn ngữ lập trình.


http://en.wikipedia.org/wiki/AWK
http://en.wikipedia.org/wiki/Sed
hvn@lappy: ~ $ whatis sed
sed (1) - stream editor for filtering and transforming text
hvn@lappy: ~ $ whatis awk
awk (1) - pattern scanning and text processing language
awk có tính năng xử lý dữ liệu theo cột, còn sed thì lại xử lý theo dòng.
Bài này sẽ viết về awk và câu lệnh sử dụng awk phổ biến nhất ;) và một khi biết câu lệnh này rồi, đảm bảo bạn sẽ dùng nó rất thường xuyên:

hvn@lappy: ~/xzone $ awk -F ':' '{ print $1,$3 }' /etc/passwd
root 0
daemon 1
bin 2
sys 3
sync 4
games 5
man 6

Phân tích:


Cấu tạo của 1 câu lệnh awk hay sed đều có dạng cơ bản :
awk [option] 'cái gì đó' file_muon_doc

câu này thực hiện in ra các phần tử thứ 1 và thứ 3 ($1,$3) của mỗi dòng trong file /etc/passwd , các phần tử phân tách nhau bởi dấu hai chấm (-F ':') . Mặc định, awk dùng dấu cách để phân tách.

câu lệnh dưới đây sẽ in ra ip của tất cả các interface máy bạn đang dùng:
hvn@lappy: ~/xzone $ ip ad | grep inet | awk '{print $2}'
127.0.0.1/8
::1/128
192.168.0.103/24
fe80::4a5d:60ff:fe80:e55f/64
192.168.122.1/24
fe80::fc54:ff:fe8f:f0d7/64
2 ví dụ trên sử dụng câu lệnh awk phổ biến nhất để in ra các cột mà bạn mong muốn, dù bạn không có ý định học viết script bằng awk thì cũng nên biết câu lệnh này!

Nếu có thời gian tớ sẽ viết thêm về awk sau khi tìm hiểu.
Còn sed thì để sau tính :D
happy Saturday!


PS: sed và awk đều là những ngôn ngữ đơn giản nên bạn không cần mất nhiều thời gian để trang bị cho mình 1 công cụ mạnh mẽ.

Danh sách các link để học thêm về awk
http://awk.info/?Learn

Comments

  1. Trước anh dùng bash+awk+curl để viết tool cảnh báo tấn công Ikariam qua SMS =)

    Còn sed thì học xong chắc cũng chỉ dùng mỗi câu lệnh:
    sed -e 's/#.*//' -e 's/[ ^I]*$//' -e '/^$/ d' filename.conf

    ReplyDelete
    Replies
    1. Chú thích là viết từ hồi chưa học Python :D

      Delete
    2. remove comment, remove tab, remove empty line :D may mà vẫn còn đọc được :D

      Delete
  2. câu lệnh sed của ngày hôm nay , yahoo \m/

    sed -i "s:archive']:&|replace\('file\://', ''\):g" `grep -Rin files_archive . | grep -v source | grep -v "if " | grep -v requirement | cut -d':' -f1 | sort -nr | uniq`

    ReplyDelete
  3. câu lệnh sed của ngày hôm nay :x

    grep -v 'define service {' infra.jinja2 | grep -v 'use salt' | grep -v servicegroups | grep -v hostgroup | grep -v display_name | sed -e 's/check_command/check:/g' -e 's/service_description/description:/g'

    ReplyDelete
  4. Với câu lệnh này:

    ip ad | grep inet | awk '{print $2}'

    nên viết lại thành:

    ip ad | awk '/inet/ {print $2}'

    ReplyDelete

Post a Comment

Popular posts from this blog

Tài liệu và hướng dẫn học Python

Để tiết kiệm thời gian, tốt nhất là đi học PyMI Updated: 130617 Sau đây là các tài liệu khuyên dùng: Vì nhiều lý do, nên học python2.7 tại thời điểm hiện tại (giờ là tháng 6/2013 - muốn biết tại sao thì tự tìm hiểu) python 3.5+ (giờ là tháng 2/2017) Chuẩn bị: 1. biết bật tắt máy 2. biết cài python 3. tập gõ 10 ngón - gõ 2 ngón hay 1 ngón cũng không sao, nhưng 10 ngón là cách dễ nhất để gõ nhanh nhất. Tài liệu - Nên dùng tài liệu tại trang chủ của Python làm chính, tham khảo thêm các tài liệu khác tại http://www.familug.org/2016/12/free-ebook.html Căn bản, mới học 1.1 Python PyMI.vn https://pymi.vn/tutorial/ 1.2. Python offical tutorial kết hợp làm bài tập trên HackerRank  (đề bài bằng tiếng Anh, nhưng Google translate 1 lúc cũng ra vì có nhiều ví dụ mẫu đi kèm). Học viên của Pymi.vn có rất nhiều học viên đã tự học với Learn Python the hard way nhưng chưa thấy ai thành công cả. Hai link dưới nên đọc sau khi đã nắm được những phần cơ bản của ngôn ngữ pytho...

The PyMiers

New FAMILUG