Lệnh gawk trong Linux

Giới thiệu

Trong lab này, bạn sẽ học cách sử dụng lệnh gawk mạnh mẽ, một công cụ xử lý văn bản trong Linux. gawk là một ngôn ngữ lập trình cho phép bạn thao tác và trích xuất dữ liệu từ các tệp văn bản. Bạn sẽ bắt đầu bằng cách khám phá các kiến thức cơ bản về lệnh gawk, bao gồm cách kiểm tra phiên bản được cài đặt trên hệ thống của bạn. Sau đó, bạn sẽ học cách trích xuất dữ liệu cụ thể từ các tệp văn bản bằng gawk, cũng như thực hiện các phép tính và chuyển đổi trên dữ liệu. Lab này cung cấp các ví dụ thực tế để giúp bạn thành thạo trong việc sử dụng gawk cho các tác vụ xử lý và chỉnh sửa văn bản.

Giới thiệu về lệnh gawk

Trong bước này, bạn sẽ tìm hiểu về lệnh gawk, một công cụ xử lý văn bản mạnh mẽ trong Linux. gawk là một ngôn ngữ lập trình cho phép bạn thao tác và trích xuất dữ liệu từ các tệp văn bản.

Đầu tiên, hãy kiểm tra phiên bản gawk được cài đặt trên hệ thống của bạn:

gawk --version

Ví dụ đầu ra:

GNU Awk 5.1.0, API: 2.0 (GNU MPFR 4.1.0, GNU MP 6.2.0)
Copyright (C) 1989, 1991-2021, the Free Software Foundation.

Lệnh gawk được sử dụng để tìm kiếm và xử lý các tệp văn bản. Nó có thể thực hiện một loạt các hoạt động, chẳng hạn như:

  • Trích xuất các trường hoặc cột cụ thể từ một tệp văn bản
  • Thực hiện các phép tính và chuyển đổi trên dữ liệu
  • Tạo báo cáo và tóm tắt
  • Tự động hóa các tác vụ dựa trên văn bản

Để bắt đầu, hãy tạo một tệp văn bản mẫu mà chúng ta sẽ sử dụng trong lab này:

cat > ~/project/data.txt << EOF
Name,Age,City
John,25,New York
Jane,30,London
Bob,35,Paris
EOF

Tệp này chứa danh sách tên, tuổi và thành phố, được phân tách bằng dấu phẩy.

Bây giờ, hãy thử một lệnh gawk đơn giản để in toàn bộ tệp:

gawk '{print}' ~/project/data.txt

Ví dụ đầu ra:

Name,Age,City
John,25,New York
Jane,30,London
Bob,35,Paris

Trong lệnh này, phần '{print}' cho gawk biết in từng dòng của tệp.

Hãy chia nhỏ cấu trúc cơ bản của một lệnh gawk:

  • gawk: Lệnh gawk
  • '{print}': Mẫu và hành động. Trong trường hợp này, mẫu trống (khớp với tất cả các dòng) và hành động là in dòng.
  • ~/project/data.txt: Tệp đầu vào.

Trong bước tiếp theo, bạn sẽ học cách trích xuất dữ liệu cụ thể từ tệp văn bản bằng gawk.

Trích xuất dữ liệu từ tệp văn bản bằng gawk

Trong bước này, bạn sẽ học cách sử dụng gawk để trích xuất dữ liệu cụ thể từ tệp văn bản bạn đã tạo ở bước trước.

Hãy bắt đầu bằng cách in cột thứ hai (Age) từ tệp data.txt:

gawk '{print $2}' ~/project/data.txt

Ví dụ đầu ra:

Age
25
30
35

Trong lệnh này, $2 đại diện cho cột thứ hai của dữ liệu đầu vào. gawk tự động chia mỗi dòng thành các trường (cột) dựa trên dấu phân cách (trong trường hợp này là dấu phẩy).

Để in cột thứ nhất và thứ ba (Name và City), bạn có thể sử dụng lệnh sau:

gawk '{print $1, $3}' ~/project/data.txt

Ví dụ đầu ra:

Name City
John New York
Jane London
Bob Paris

Bạn cũng có thể sử dụng tùy chọn -F để chỉ định một dấu phân cách trường khác. Ví dụ: để sử dụng dấu phẩy làm dấu phân cách trường:

gawk -F, '{print $1, $3}' ~/project/data.txt

Ví dụ đầu ra:

Name City
John New York
Jane London
Bob Paris

Ngoài ra, gawk cho phép bạn thực hiện xử lý có điều kiện. Ví dụ: để chỉ in tên của những người lớn hơn 30:

gawk -F, '$2 > 30 {print $1}' ~/project/data.txt

Ví dụ đầu ra:

Bob

Trong lệnh này, $2 > 30 là điều kiện và {print $1} là hành động được thực hiện cho các dòng phù hợp với điều kiện.

Hãy thử nghiệm với các lệnh gawk khác nhau để trích xuất và thao tác dữ liệu trong tệp data.txt. Bạn càng thực hành nhiều, bạn càng cảm thấy thoải mái hơn khi sử dụng gawk cho các tác vụ xử lý văn bản.

Thực hiện các phép tính và chuyển đổi với gawk

Trong bước này, bạn sẽ học cách sử dụng gawk để thực hiện các phép tính và chuyển đổi trên dữ liệu trong tệp data.txt.

Hãy bắt đầu bằng cách tính tuổi trung bình của những người trong tệp:

gawk -F, '{sum += $2} END {print "Average age:", sum/NR}' ~/project/data.txt

Ví dụ đầu ra:

Average age: 30

Trong lệnh này:

  • {sum += $2} cộng giá trị của cột thứ hai (tuổi) vào biến sum cho mỗi dòng.
  • END {print "Average age:", sum/NR} tính tuổi trung bình bằng cách chia tổng cho số lượng bản ghi (NR).

Tiếp theo, hãy chuyển đổi dữ liệu bằng cách chuyển đổi tuổi sang năm và tháng:

gawk -F, '{years = int($2 / 1); months = ($2 % 1) * 12; print $1, years "y", months "m"}' ~/project/data.txt

Ví dụ đầu ra:

John 25y 0m
Jane 30y 0m
Bob 35y 0m

Trong lệnh này:

  • {years = int($2 / 1); months = ($2 % 1) * 12; print $1, years "y", months "m"} tính toán năm và tháng từ giá trị tuổi trong cột thứ hai.

Bạn cũng có thể sử dụng gawk để tạo báo cáo với các phép tính hoặc chuyển đổi bổ sung. Ví dụ: hãy tạo một báo cáo bao gồm tên, tuổi và thành phố, cùng với "mức thuế" dựa trên độ tuổi:

gawk -F, '{
  if ($2 < 30)
    tax_bracket = "Low"
  else if ($2 >= 30 && $2 < 50)
    tax_bracket = "Medium"
  else
    tax_bracket = "High"
  print $1, $2, $3, tax_bracket
}' ~/project/data.txt

Ví dụ đầu ra:

John 25 New York Low
Jane 30 London Medium
Bob 35 Paris Medium

Trong lệnh này:

  • Câu lệnh if-else xác định mức thuế dựa trên độ tuổi.
  • Câu lệnh print xuất tên, tuổi, thành phố và mức thuế cho mỗi bản ghi.

Hãy thoải mái thử nghiệm với các lệnh và chuyển đổi gawk nâng cao hơn để khám phá thêm các khả năng của công cụ xử lý văn bản mạnh mẽ này.

Tóm tắt

Trong lab này, bạn đã học về lệnh gawk, một công cụ xử lý văn bản mạnh mẽ trong Linux. Bạn bắt đầu bằng cách khám phá các kiến thức cơ bản về lệnh gawk, bao gồm cách kiểm tra phiên bản và sử dụng nó để in nội dung của một tệp văn bản mẫu. Sau đó, bạn đã học cách trích xuất dữ liệu cụ thể từ tệp văn bản, chẳng hạn như in cột thứ hai (Age) bằng cú pháp $2. Cuối cùng, bạn đã khám phá cách thực hiện các phép tính và chuyển đổi trên dữ liệu bằng gawk, chẳng hạn như tính tuổi trung bình.

Trong suốt lab, bạn đã hiểu rõ về tính linh hoạt của lệnh gawk và khả năng thao tác và trích xuất dữ liệu từ các tệp văn bản của nó. Những kỹ năng này có thể được áp dụng cho một loạt các tác vụ dựa trên văn bản, từ phân tích dữ liệu đến tạo báo cáo và tự động hóa.

400+ câu lệnh phổ biến trong Linux