Skip to main content

awk và cut

Các tiện ích UNIX (UNIX utilities) thường nhận đầu vào là text, và output ra cũng là text. Để các chương trình nối lại được với nhau, tức dùng output của chương trình này làm imput cho chương trình kia, người ta sử dụng pipeline (" | ").

Cũng vì điều nói trên, mà việc bóc tách dữ liệu từ output của 1 chương trình là cần thiết, bởi 1 chương trình có thể sinh ra nhiều dòng text, trong khi bạn chỉ cần 1 dữ liệu nào đó trong đống text đấy. Bạn có thể copy bằng tay, nhưng bạn sẽ không muốn làm như thế nếu phải làm 1000 lần, okay?

2 trong số nhiều công cụ phục vụ mục đích trên là "cut" và "awk", mục đích chính (được dùng nhiều nhất) là dùng để cắt theo cột. Các ví dụ sau sẽ minh họa tính năng của cut và awk

$ echo "one/two/three" | cut -d'/' -f1
one
$ echo "one/two/three" | cut -d'/' -f2
two
$ echo "one/two/three" | cut -d'/' -f3
three
$ echo "one/two/three" | cut -d'/' -f2-
two/three
$ echo "one:two:three" | cut -d':' -f2-
two:three
$echo "/one/two/three" | cut -d'/' -f2
one

Và awk

hvn@lappy: ~ () $ echo "one:two:three" | awk -F':' '{print $1}'
one
hvn@lappy: ~ () $ echo "one:two:three" | awk -F':' '{print $1}'
one
hvn@lappy: ~ () $ echo "one:two:three" | awk -F':' '{print $2}'
two
hvn@lappy: ~ () $ echo "one:two:three" | awk -F':' '{print $1 $2}'
onetwo

Từ các output nói trên, hãy nhớ rằng cut và awk đều coi vị trí số 1 là vị trí trước "separator" đầu tiên (separator được chỉ định bởi -d với cut và -F với awk)


awk có thể cho ra những output phức tạp hơn, bởi AWK là một ngôn ngữ lập trình. Thậm chí nó có thể làm phép tính:

$ echo '1/2/3/4' | awk -F'/' '{print $3 - $1}'
2
$ echo '1/2/3/4' | awk -F'/' '{print $3 * $2}'
6
Chỉ với 2 lệnh cơ bản trên, đã đủ để bạn có thể bóc tách những dữ liệu mình cần theo cột.

Hết.

Comments

  1. field separator với awk và cut đều không cần "quote", trừ khi nó là những ký tự đặc biệt đối với bash.

    Vì vậy ở các câu lệnh trên:
    cut -d':' có thể viết là cut -d:
    tương tự với awk.

    Một ví dụ khi cần phải quote:

    # echo "meo'meo" | cut -d' -f1 #không chạy được do với bash, dấu ' cần phải có một dấu ' tương ứng để đóng
    > ^C
    # echo "meo'meo" | cut -d"'" -f1
    meo

    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