✨AWK

AWK

AWK là ngôn ngữ lập trình được nhằm mục đích xử lý các Tập tin chữ (text file) theo nguyên lý khớp mẫu (pattern matching); đồng thời còn là tên gọi một chương trình trong hệ điều hành UNIX. Trong UNIX các chương trình được viết tên chữ thường nên AWK còn được gọi là Awk hoặc awk.

Lịch sử

Vào đầu những năm 1970, công cụ mạnh trong UNIX có nhiệm vụ xử lý các file văn bản là grep, dựa trên nguyên tắc khớp mẫu. Các tác giả muốn bổ sung tính năng thao tác với số để đưa Awk thành một công cụ hữu hiệu có thể gần với một ngôn ngữ lập trình thực thụ. Đặc biệt là khả năng phân tách cú pháp; về phương diện này thì Awk gần như đảm đương được vai trò của lex và yacc.

Tên gọi AWK bắt nguồn từ cách gọi đùa của các đồng nghiệp tại Bell Labs, ghép các chữ cái đầu của tên ba tác giả: Aho, Weinberger, và Kernighan.

Cú pháp

Dạng cú pháp cơ bản của Awk là:

mẫu_1 { câu lệnh_1 }; mẫu_2 { câu lệnh_2 }; ... Theo đó máy tính sẽ dò từng dòng trong file chữ và so sánh với mẫu 1. Nếu khớp, câu lệnh 1 được thực hiện. Tiếp theo máy tính so sánh dòng chữ với mẫu 2. Nếu khớp, câu lệnh 2 được thực hiện; và cứ như vậy.

Ví dụ

Để minh họa ta lấy ví dụ một file hồ sơ sức khỏe có nội dung như sau (mỗi người có thông tin giới tính và chiều cao)

An nam 165

Mai nu 158

Minh nam 170

Minh nu 162

Thanh nam 169

Với một file như vậy các cột được Awk xem như các trường và được đặt tên $1 cho cột thứ nhất, $2 cho cột thứ hai, $3 cho cột thứ ba,...

Mẫu

Một mẫu chính là biểu thức so sánh (biểu thức logic) giữa tên cột và giá trị. Chẳng hạn:

  • tên người là Minh tương ứng với mẫu sau: $1 == "Minh"
  • giới tính là nam tương ứng với mẫu sau: $2 == "nam"

Khi gặp một mẫu, máy tính hiểu rằng chỉ thực hiện câu lệnh với những dòng tương ứng với mẫu đó. Trong trường hợp thực hiện lệnh với mọi dòng trong file chữ thì mẫu được bỏ qua, chỉ cần viết:

{câu lệnh}

Đối với mẫu, còn có thể dùng các toán tử logic như || (hoặc), && (và). Để trình bày được đơn giản, ở đây ta không đề cập đến.

Câu lệnh

Câu lệnh thường dùng trong Awk là lệnh in ra màn hình (print). Chẳng hạn:

  • In ra tên người:

    {print $1}
  • In ra chiều cao quy đổi ra mét:

    {print $3 / 100}

Trong trường hợp in đầy đủ cả dòng thì ta bỏ qua phần {câu lệnh}.

Câu lệnh của Awk còn bao gồm cả những cấu trúc điều khiển (lặp, rẽ nhánh) thường gặp trong các ngôn ngữ lập trình. Ở đây, để đơn giản ta không đề cập đến.

Ngoài ra, nếu có nhiều câu lệnh trong một cặp { } thì chúng cần được phân tách bởi dấu chấm phẩy.

Lệnh đầy đủ: mẫu đi kèm câu lệnh

  • In ra tên và chiều cao những người là nam giới

    $2 == "nam" { print $1, $3 }
  • In ra chiều cao quy ra mét của mọi người trong danh sách (không cần viết ra mẫu)

    {print $1, $2, $3 / 100}
  • In ra thông tin đầy đủ của tất cả những người có tên Minh (không cần viết câu lệnh print)

    $1 == "Minh"

Trường hợp đặc biệt

Thông thường với mỗi dòng mẫu {câu lệnh} máy sẽ kiểm tra đối chiếu với tất cả các dòng trong file chữ, lần lượt từ trên xuống dưới. Nếu dòng nào khớp với mẫu thì thực hiện câu lệnh. Awk cho phép một ngoại lệ là được thực hiện một số câu lệnh trước và sau khi khi rà soát file chữ. Các câu lệnh ngoại lệ này được đặt kèm với BEGIN { }END { }.

Chẳng hạn cần một dòng tiêu đề ở trên cùng, tiếp theo là in ra các con số chiều cao của những người nữ giới (giấu tên); cuối cùng là tổng kết có bao nhiêu người là nữ và chiều cao trung bình là bao nhiêu:

BEGIN { print "So lieu chieu cao cua nu gioi " }

$1 = "nu" { print $3; sonu = sonu + 1; caotb = caotb + $3 }

END {print "Tong so nu la: %d\n voi chieu cao trung binh %8.2f m.", sonu, caotb*100.0/sonu }

Biến

Các biến trong Awk có kiểu động, không cần khai báo và tự động lấy các giá trị mặc định (bằng 0 với kiểu số, bằng xâu rỗng đối với chuỗi ký tự).

Trong ví dụ trên hai biến là sonucaotb được dùng đến mà không cần được khởi tạo trong phần BEGIN.

Chạy chương trình

Từ dấu nhắc lệnh có thể gọi trực tiếp Awk với đoạn mã cùng tên file chữ, theo mẫu:

awk 'nội dung mã lệnh awk' tên_file_chữ awk -f tên_file_mã_lệnh.awk tên_file_chữ

Chẳng hạn:

awk '$2 == "nam" { print $1, $3 }' chieucao.txt

Hoặc nếu đã lưu file mã lệnh, chẳng hạn trung_binh.awk thì có thể gọi

awk -f trung_binh.awk chieucao.txt

Đối với UNIX và Linux, có thể xâu chuỗi Awk với các lệnh khác theo kiểu ống dẫn lệnh.

Các phiên bản

Hai phiên bản chính của Awk là:

  • gawk: theo giấy phép GPL.
  • nawk: một hệ Awk mới (new Awk) với nhiều tính năng được bổ sung.
👁️ 2 | 🔗 | 💖 | ✨ | 🌍 | ⌚
**AWK** là ngôn ngữ lập trình được nhằm mục đích xử lý các Tập tin chữ (_text file_) theo nguyên lý khớp mẫu (_pattern matching_); đồng thời còn là tên gọi một chương trình trong

**Ngôn ngữ kịch bản** () là ngôn ngữ lập trình cho môi trường thời gian chạy đặc biệt tự động hóa thực thi các tác vụ; các tác vụ thay thế có thể
**Brian Wilson Kernighan** (; sinh ngày 1 tháng 1 năm 1942) Ông là tác giả của nhiều chương trình Unix, bao gồm cả ditroff. Kernighan là đồng tác giả của AWK và AMPL ngôn ngữ
**pgrep** là một phần mềm tiện ích Unix, ban đầu được viết cho Solaris 7, sau đó được tích hợp vào bộ phần mềm procps-ng trên hệ điều hành GNU/Linux, các hệ điều hành BSD
**Unix** (; được đăng ký nhãn hiệu là **UNIX**) là một họ hệ điều hành máy tính đa nhiệm, đa người dùng được viết vào những năm 1960 và 1970 do một số nhân viên
Đây là danh sách nguồn gốc các thuật ngữ liên quan đến máy tính (hay **danh sách từ nguyên thuật ngữ máy tính**). Nó có liên quan đến cả phần cứng và phần mềm máy
Cygwin chạy trên Windows; trên đó ta thấy hai cửa sổ chạy [[mintty của Cygwin.]] **Cygwin** là môi trường *nix trong Windows bằng cách tạo một lớp tương thích. Thông qua đó người dùng Windows
Mục đích của **danh sách các ngôn ngữ lập trình** này là bao gồm tất cả các ngôn ngữ lập trình hiện tại đáng chú ý, được sử dụng hiện tại và những ngôn ngữ
**Người Lào** (tiếng Lào: ລາວ, tiếng Isan: ลาว, IPA: láːw) là một dân tộc có vùng cư trú truyền thống là một phần bắc bán đảo Đông Dương. Họ là một phân nhóm của các
**Ngôn ngữ miền chuyên biệt** hay **ngôn ngữ đặc tả chuyên biệt** (tiếng Anh: **domain-specific language** hay **DSL**) là một ngôn ngữ máy tính chuyên dùng cho một miền ứng dụng. Điều này trái ngược
Có 3 tông màu chính. Tác dụng dưỡng ẩm môi, chống thấm nước- Son thay đổi màu theo nhiệt độ môi. Quý khách có thể tham khảo qua bảng màu trong ảnh- Thành phần chủ