awk gawk - ngôn ngữ quét và xử lý mẫu
gawk [ POSIX or GNU style options ] -f program-file [ - - ] file . . .
gawk [ POSIX or GNU style options ] [ - - ] program-text file . . .
Gawk là triển khai ngôn ngữ lập trình AWK của Dự án GNU. Nó phù hợp với định nghĩa của ngôn ngữ trong tiêu chuẩn POSIX 1003.1. Phiên bản này lại dựa trên mô tả trong Ngôn ngữ lập trình AWK của Aho, Kernighan và Weinberger. Gawk cung cấp các tính năng bổ sung có trong phiên bản hiện tại của awk của Brian Kernighan và nhiều tiện ích mở rộng dành riêng cho GNU.
Dòng lệnh bao gồm các tùy chọn để trố mắt, văn bản chương trình AWK (nếu không được cung cấp qua các tùy chọn -f hoặc - -include), và các giá trị sẽ khả dụng trong các biến AWK được xác định trước ARGC và ARGV.
Trang hướng dẫn này được cố ý càng ngắn gọn càng tốt. Chi tiết đầy đủ được cung cấp trong GAWK: Lập trình AWK hiệu quả và bạn nên xem toàn bộ câu chuyện về bất kỳ tính năng cụ thể nào ở đó. Nếu có thể, các liên kết đến phiên bản trực tuyến của hướng dẫn được cung cấp.
Các tùy chọn Gawk có thể là tùy chọn một chữ cái kiểu POSIX truyền thống hoặc tùy chọn dài kiểu GNU. Các tùy chọn POSIX bắt đầu bằng một dấu “-”, trong khi các tùy chọn dài bắt đầu bằng “- -”. Các tùy chọn dài được cung cấp cho cả các tính năng dành riêng cho GNU và cho các tính năng bắt buộc của POSIX.
Các tùy chọn dành riêng cho Gawk thường được sử dụng ở dạng tùy chọn dài. Các đối số cho tùy chọn dài được nối với tùy chọn bằng dấu =, không có khoảng trắng ở giữa hoặc chúng có thể được cung cấp trong đối số dòng lệnh tiếp theo. Các tùy chọn dài có thể được viết tắt, miễn là chữ viết tắt vẫn là duy nhất.
Ngoài ra, mọi tùy chọn dài đều có một tùy chọn ngắn tương ứng để chức năng của tùy chọn có thể được sử dụng từ bên trong #! tập lệnh thực thi.
Gawk chấp nhận các tùy chọn sau. Các tùy chọn tiêu chuẩn được liệt kê đầu tiên, tiếp theo là các tùy chọn cho tiện ích mở rộng gawk, được liệt kê theo thứ tự bảng chữ cái theo tùy chọn ngắn.
- -file program-file Đọc nguồn chương trình AWK từ tệp program-file, thay vì từ đối số dòng lệnh đầu tiên. Có thể sử dụng nhiều tùy chọn -f. Các tệp được đọc bằng -f được xử lý như thể chúng bắt đầu bằng câu lệnh @namespace "awk" ngầm định.
- -dấu tách trường fs Sử dụng fs cho dấu tách trường đầu vào (giá trị của biến được xác định trước FS).
Gán giá trị val cho biến var, trước khi bắt đầu thực hiện chương trình. Các giá trị biến như vậy có sẵn cho quy tắc BEGIN của chương trình AWK.
- -ký tự dưới dạng byte Coi tất cả dữ liệu đầu vào là ký tự byte đơn. Tùy chọn - -posix ghi đè tùy chọn này.
- -truyền thống Chạy ở chế độ tương thích. Trong chế độ tương thích, trố mắt hoạt động giống hệt với awk của Brian Kernighan; không có tiện ích mở rộng dành riêng cho GNU nào được nhận dạng.
- -copyright In phiên bản ngắn của thông báo thông tin bản quyền GNU trên đầu ra tiêu chuẩn và thoát thành công.
In danh sách đã sắp xếp của các biến toàn cục, loại và giá trị cuối cùng của chúng thành tệp. Tệp mặc định là awkvars.out trong thư mục hiện tại.
Cho phép gỡ lỗi các chương trình AWK. Theo mặc định, trình gỡ lỗi đọc các lệnh một cách tương tác từ bàn phím (đầu vào tiêu chuẩn). Đối số tệp tùy chọn chỉ định một tệp có danh sách các lệnh để trình gỡ lỗi thực thi không tương tác.
Trong chế độ thực thi này, gawk tải mã nguồn AWK rồi nhắc các lệnh gỡ lỗi. Gawk chỉ có thể gỡ lỗi nguồn chương trình AWK được cung cấp với các tùy chọn -f và - -include. Trình gỡ lỗi được ghi lại trong GAWK: Lập trình AWK hiệu quả; xem https://www.gnu.org/software/gawk/manual/html_node/Debugger.html#Debugger.
- -nguồn văn bản chương trình Sử dụng văn bản chương trình làm mã nguồn chương trình AWK. Mỗi đối số được cung cấp qua -e được xử lý như thể nó bắt đầu bằng câu lệnh @namespace "awk" ngầm định.
Tuy nhiên, tương tự như -f, đây là tùy chọn được xử lý cuối cùng. Điều này nên được sử dụng với các tập lệnh #!, đặc biệt là đối với các ứng dụng CGI, để tránh chuyển các tùy chọn hoặc mã nguồn (!) trên dòng lệnh từ một URL. Tùy chọn này vô hiệu hóa các phép gán biến dòng lệnh.
- -gen-pot Quét và phân tích cú pháp chương trình AWK, đồng thời tạo tệp định dạng GNU .pot (Mẫu đối tượng di động) trên đầu ra tiêu chuẩn với các mục nhập cho tất cả các chuỗi có thể bản địa hóa trong chương trình. Bản thân chương trình không được thực thi.
- -help In một bản tóm tắt tương đối ngắn về các tùy chọn khả dụng trên đầu ra tiêu chuẩn. Theo Tiêu chuẩn mã hóa GNU, các tùy chọn này tạo ra một lần thoát thành công ngay lập tức.
Tải thư viện nguồn awk. Thao tác này tìm kiếm thư viện bằng cách sử dụng biến môi trường AWKPATH. Nếu tìm kiếm ban đầu không thành công, một lần tìm kiếm khác sẽ được thực hiện sau khi thêm hậu tố .awk. Tệp sẽ chỉ được tải một lần (nghĩa là các bản sao bị loại bỏ) và mã không cấu thành nguồn chương trình chính. Các tệp được đọc bằng - -include được xử lý như thể chúng bắt đầu bằng câu lệnh @namespace "awk" ngầm định.
- -trace In tên mã byte bên trong khi chúng được thực thi khi chạy chương trình. Dấu vết được in thành lỗi tiêu chuẩn. Mỗi `` mã op'' được bắt đầu bằng dấu + trong đầu ra.
- -load lib Tải tiện ích mở rộng gawk từ thư viện dùng chung lib. Thao tác này tìm kiếm thư viện bằng cách sử dụng biến môi trường AWKLIBPATH. Nếu tìm kiếm ban đầu không thành công, một nỗ lực khác sẽ được thực hiện sau khi thêm hậu tố thư viện chia sẻ mặc định cho nền tảng. Quy trình khởi tạo thư viện dự kiến sẽ được đặt tên là dl_load().
Đưa ra cảnh báo về các cấu trúc không rõ ràng hoặc không thể di động đối với các triển khai AWK khác. Xem https://www.gnu.org/software/gawk/manual/html_node/Options.html#Options để biết danh sách các giá trị có thể có cho value.
- -bignum Buộc tính số học chính xác tùy ý trên các số. Tùy chọn này không có hiệu lực nếu gawk không được biên dịch để sử dụng các thư viện GNU MPFR và GMP. (Trong trường hợp như vậy, trố mắt đưa ra cảnh báo.)
LƯU Ý: Tính năng này đang tạm dừng. Người duy trì gawk chính không còn hỗ trợ nó nữa, mặc dù có một thành viên của nhóm phát triển đang hỗ trợ. Nếu tình huống này thay đổi, tính năng này sẽ bị xóa khỏi gawk.
Đặt GAWK_NO_MPFR_WARN trong môi trường để tắt cảnh báo.
- -dữ-liệu-không-thập-phân Nhận dạng giá trị bát phân và thập lục phân trong dữ liệu đầu vào. Sử dụng tùy chọn này hết sức thận trọng!
- -use-lc-numeric Buộc trố mắt sử dụng ký tự dấu thập phân của ngôn ngữ khi phân tích cú pháp dữ liệu đầu vào.
- -hoài niệm Mang lại khoảnh khắc hoài niệm cho người dùng awk đã lâu.
Xuất một phiên bản in đẹp của chương trình thành tệp. Tệp mặc định là awkprof.out trong thư mục hiện tại. Tùy chọn này ngụ ý - -không tối ưu hóa.
- -optimize Bật tính năng tối ưu hóa mặc định của gawk dựa trên biểu diễn bên trong của chương trình. Tùy chọn này được bật mặc định.
Bắt đầu phiên lập hồ sơ và gửi dữ liệu lập hồ sơ tới tệp hồ sơ. Mặc định là awkprof.out trong thư mục hiện tại. Cấu hình chứa số lần thực thi của từng câu lệnh trong chương trình ở lề trái và số lần gọi hàm cho mỗi hàm do người dùng xác định. Gawk chạy chậm hơn trong chế độ này. Tùy chọn này ngụ ý - -không tối ưu hóa.
- -posix Thao tác này sẽ bật chế độ tương thích và vô hiệu hóa một số tiện ích mở rộng phổ biến.
- -re-interval Cho phép sử dụng biểu thức khoảng thời gian trong đối sánh biểu thức chính quy. Biểu thức khoảng được bật theo mặc định, nhưng tùy chọn này vẫn còn để tương thích ngược.
- -no-optimize Vô hiệu hóa các tối ưu hóa mặc định của gawk trên biểu diễn bên trong của chương trình.
- -sandbox Chạy gawk ở chế độ hộp cát, tắt chức năng system(), chuyển hướng đầu vào bằng getline, đầu ra chuyển hướng bằng print và printf, đồng thời tải các tiện ích mở rộng động. Thực thi lệnh (thông qua đường ống) cũng bị vô hiệu hóa.
- -lint-old Đưa ra cảnh báo về các cấu trúc không khả dụng với phiên bản gốc của UNIX awk.
- -version In thông tin phiên bản cho bản sao gawk cụ thể này trên đầu ra tiêu chuẩn. Điều này rất hữu ích khi báo cáo lỗi. Theo Tiêu chuẩn mã hóa GNU, các tùy chọn này tạo ra một lần thoát thành công ngay lập tức.
Báo hiệu sự kết thúc của các tùy chọn. Điều này hữu ích để cho phép các đối số tiếp theo đối với chính chương trình AWK bắt đầu bằng dấu “-”.
Trong chế độ tương thích, bất kỳ tùy chọn nào khác được gắn cờ là không hợp lệ, nhưng nếu không thì sẽ bị bỏ qua. Trong hoạt động bình thường, miễn là văn bản chương trình đã được cung cấp, các tùy chọn không xác định sẽ được chuyển sang chương trình AWK trong mảng ARGV để xử lý.
Để tương thích với POSIX, tùy chọn -W có thể được sử dụng, theo sau là tên của một tùy chọn dài.
Một chương trình AWK bao gồm một chuỗi các lệnh tùy chọn, các câu lệnh hành động mẫu và các định nghĩa hàm tùy chọn.
@include "filename "
@load "filename "
@namespace "name "
pattern { action statements }
function name(parameter list) { statements }Gawk trước tiên đọc nguồn chương trình từ (các) tệp chương trình nếu được chỉ định, từ các đối số đến - -nguồn hoặc từ đối số không phải đầu tiên. -option đối số trên dòng lệnh. Các tùy chọn -f và - -source có thể được sử dụng nhiều lần trên dòng lệnh. Gawk đọc văn bản chương trình như thể tất cả tệp chương trình và văn bản nguồn dòng lệnh đã được nối với nhau.
Ngoài ra, các dòng bắt đầu bằng @include có thể được sử dụng để đưa các tệp nguồn khác vào chương trình của bạn. Điều này tương đương với việc sử dụng tùy chọn - -bao gồm.
Các dòng bắt đầu bằng @load có thể được sử dụng để tải các hàm mở rộng vào chương trình của bạn. Điều này tương đương với việc sử dụng tùy chọn - -load.
Biến môi trường AWKPATH chỉ định đường dẫn tìm kiếm sẽ sử dụng khi tìm tệp nguồn có tên bằng tùy chọn -f và - -include. Nếu biến này không tồn tại, đường dẫn mặc định là ".:/usr/local/share/awk". (Thư mục thực tế có thể khác nhau, tùy thuộc vào cách gawk được xây dựng và cài đặt.) Nếu tên tệp được cung cấp cho tùy chọn -f chứa ký tự “/”, không có đường dẫn tìm kiếm được thực hiện.
Biến môi trường AWKLIBPATH chỉ định đường dẫn tìm kiếm sẽ sử dụng khi tìm tệp nguồn được đặt tên bằng tùy chọn - -load. Nếu biến này không tồn tại, đường dẫn mặc định là "/usr/local/lib/gawk". (Thư mục thực tế có thể khác nhau, tùy thuộc vào cách gawk được xây dựng và cài đặt.)
Gawk thực thi các chương trình AWK theo thứ tự sau. Đầu tiên, tất cả các phép gán biến được chỉ định thông qua tùy chọn -v đều được thực hiện. Tiếp theo, gawk biên dịch chương trình thành một biểu mẫu bên trong. Sau đó, gawk thực thi mã trong (các) quy tắc BEGIN (nếu có), rồi tiếp tục đọc từng tệp có tên trong mảng ARGV (tối đa ARGV[ARGC-1]). Nếu không có tệp nào được đặt tên trên dòng lệnh, gawk sẽ đọc đầu vào tiêu chuẩn.
Nếu tên tệp trên dòng lệnh có dạng var=val thì nó được coi là một phép gán biến. Biến var sẽ được gán giá trị val. (Điều này xảy ra sau khi bất kỳ (các) quy tắc BEGIN nào được chạy.)
Nếu giá trị của một phần tử cụ thể của ARGV trống (""), thì gawk sẽ bỏ qua phần tử đó.
Đối với mỗi tệp đầu vào, nếu quy tắc BEGINFILE tồn tại, gawk sẽ thực thi mã được liên kết trước khi xử lý nội dung của tệp. Tương tự, gawk thực thi mã được liên kết với quy tắc ENDFILE sau khi xử lý tệp.
Đối với mỗi bản ghi trong đầu vào, gawk kiểm tra xem nó có khớp với bất kỳ mẫu nào trong chương trình AWK hay không. Đối với mỗi mẫu mà bản ghi khớp, gawk thực thi hành động được liên kết. Các mẫu được kiểm tra theo thứ tự chúng xuất hiện trong chương trình.
Cuối cùng, sau khi tất cả dữ liệu đầu vào đã hết, gawk thực thi mã trong (các) quy tắc END (nếu có).
Theo POSIX, các tệp có tên trên dòng lệnh awk phải là tệp văn bản. Hành vi là ``không xác định'' nếu chúng không. Hầu hết các phiên bản awk coi một thư mục trên dòng lệnh là một lỗi nghiêm trọng.
Đối với gawk, một thư mục trên dòng lệnh sẽ đưa ra cảnh báo nhưng nếu không thì sẽ bị bỏ qua. Nếu một trong hai tùy chọn - -posix hoặc - -truyền thống được đưa ra, thì gawk trở lại xử lý các thư mục trên dòng lệnh là một lỗi nghiêm trọng .
Các biến AWK là động; chúng ra đời khi chúng được sử dụng lần đầu tiên. Giá trị của chúng là số hoặc chuỗi dấu phẩy động hoặc cả hai, tùy thuộc vào cách chúng được sử dụng. Ngoài ra, gawk cho phép các biến có loại biểu thức chính quy. AWK cũng có mảng một chiều; các mảng có nhiều chiều có thể được mô phỏng. Tuy nhiên, gawk cung cấp các mảng mảng thực sự. Một số biến được xác định trước được đặt khi chương trình chạy; chúng được mô tả khi cần thiết và tóm tắt dưới đây.
Thông thường, các bản ghi được phân tách bằng các ký tự xuống dòng. Bạn có thể kiểm soát cách phân tách các bản ghi bằng cách gán giá trị cho biến tích hợp sẵn RS. Xem https://www.gnu.org/software/gawk/manual/html_node/Records.html để biết chi tiết.
Khi mỗi bản ghi đầu vào được đọc, gawk chia bản ghi thành trường, sử dụng giá trị của biến FS làm dấu tách trường. Ngoài ra, FIELDWIDTHS và FPAT có thể được sử dụng để kiểm soát việc tách trường đầu vào. Xem chi tiết, bắt đầu tại https://www.gnu.org/software/gawk/manual/html_node/Fields.html.
Mỗi trường trong bản ghi đầu vào có thể được tham chiếu theo vị trí của nó: $1, $2, v.v. $0 là toàn bộ bản ghi, bao gồm cả khoảng trắng ở đầu và cuối.
Biến NF được đặt thành tổng số trường trong bản ghi đầu vào.
Các tham chiếu đến các trường không tồn tại (nghĩa là các trường sau $NF) tạo ra chuỗi rỗng. Tuy nhiên, việc gán cho trường không tồn tại (ví dụ: $ (NF+2)=5) làm tăng giá trị của NF, tạo bất kỳ trường xen kẽ nào có giá trị rỗng chuỗi làm giá trị của chúng và làm cho giá trị của $0 được tính toán lại, với các trường được phân tách bằng giá trị của OFS. Tham chiếu đến các trường được đánh số âm gây ra lỗi nghiêm trọng. Việc giảm NF làm mất giá trị của các trường vượt qua giá trị mới và giá trị của $0 được tính toán lại, với các trường được phân tách bằng giá trị của OFS.
Việc gán giá trị cho trường hiện có khiến toàn bộ bản ghi được tạo lại khi $0 được tham chiếu. Tương tự, việc gán giá trị cho $0 khiến bản ghi được chia lại, tạo giá trị mới cho các trường.
Các biến dựng sẵn của Gawk được liệt kê bên dưới. Danh sách này là cố ý ngắn gọn. Để biết chi tiết, hãy xem https://www.gnu.org/software/gawk/manual/html_node/Built_002din-Variables.
Số lượng đối số dòng lệnh.
Chỉ mục trong ARGV của tệp hiện tại đang được xử lý.
Mảng đối số dòng lệnh. Mảng được lập chỉ mục từ 0 đến ARGC - 1.
Trên các hệ thống không phải POSIX, chỉ định sử dụng chế độ “nhị phân” cho tất cả tệp I/O. Xem https://www.gnu.org/software/gawk/manual/html_node/PC-Using.html để biết chi tiết.
Định dạng chuyển đổi cho các số, "%.6g", theo mặc định.
Một mảng chứa các giá trị của môi trường hiện tại. Mảng được lập chỉ mục bởi các biến môi trường, mỗi phần tử là giá trị của biến đó.
Nếu xảy ra lỗi hệ thống khi thực hiện chuyển hướng cho getline, trong khi đọc getline hoặc trong khi đóng(), thì ERRNO được đặt thành một chuỗi mô tả lỗi. Giá trị có thể được dịch sang các ngôn ngữ không phải tiếng Anh.
Danh sách độ rộng trường được phân tách bằng khoảng trắng. Khi được đặt, gawk phân tích cú pháp đầu vào thành các trường có chiều rộng cố định, thay vì sử dụng giá trị của biến FS làm dấu tách trường. Mỗi chiều rộng của trường có thể tùy chọn được bắt đầu bằng một giá trị được phân tách bằng dấu hai chấm chỉ định số lượng ký tự cần bỏ qua trước khi trường bắt đầu.
Tên của tệp đầu vào hiện tại. Nếu không có tệp nào được chỉ định trên dòng lệnh, thì giá trị của FILENAME là “-”. Tuy nhiên, FILENAME không được xác định trong quy tắc BEGIN (trừ khi được đặt bởi getline).
Số bản ghi đầu vào trong tệp đầu vào hiện tại.
Một biểu thức chính quy mô tả nội dung của các trường trong một bản ghi. Khi được đặt, gawk phân tích cú pháp đầu vào thành các trường, trong đó các trường khớp với biểu thức chính quy, thay vì sử dụng giá trị của FS làm dấu tách trường.
Dấu tách trường đầu vào, một khoảng trắng theo mặc định. Xem https://www.gnu.org/software/gawk/manual/html_node/Field-Separators.html để biết chi tiết.
Một mảng có chỉ số và giá trị tương ứng là tên của tất cả các hàm mở rộng hoặc do người dùng định nghĩa trong chương trình. LƯU Ý: Bạn không được sử dụng câu lệnh delete với mảng FUNCTAB.
Kiểm soát phân biệt chữ hoa chữ thường của tất cả các hoạt động chuỗi và biểu thức chính quy. Xem https://www.gnu.org/software/gawk/manual/html_node/Case_002dsensitivevity.html để biết chi tiết.
Cung cấp khả năng kiểm soát động tùy chọn - -lint từ bên trong chương trình AWK.
Số trường trong bản ghi đầu vào hiện tại.
Tổng số bản ghi đầu vào được xem cho đến nay.
Định dạng đầu ra cho số, "%.6g", theo mặc định.
Dấu tách trường đầu ra, một khoảng trắng theo mặc định.
Dấu tách bản ghi đầu ra, theo mặc định là một dòng mới.
Độ chính xác làm việc của các số dấu phẩy động chính xác tùy ý, 53 theo mặc định.
Các phần tử của mảng này cung cấp quyền truy cập vào thông tin về chương trình AWK đang chạy. Xem https://www.gnu.org/software/gawk/manual/html_node/Auto_002dset để biết chi tiết.
Theo mặc định, chế độ làm tròn được sử dụng cho số học chính xác tùy ý trên các số "N" (chế độ IEEE-754 roundTiesToEven). Xem https://www.gnu.org/software/gawk/manual/html_node/Setting-the-rounding-mode để biết chi tiết.
Dấu tách bản ghi đầu vào, theo mặc định là một dòng mới.
Người kết thúc bản ghi. Trố mắt đặt RT thành văn bản đầu vào khớp với ký tự hoặc cụm từ thông dụng được chỉ định bởi RS.
Chỉ số của ký tự đầu tiên được so khớp bởi match(); 0 nếu không khớp.
Độ dài của chuỗi khớp với match(); -1 nếu không khớp.
Theo mặc định, chuỗi được sử dụng để phân tách nhiều chỉ số con trong phần tử mảng "\034".
Mảng có chỉ số là tên của tất cả các biến toàn cục và mảng hiện được xác định trong chương trình. Bạn không được sử dụng câu lệnh delete với mảng SYMTAB, cũng như không được gán cho các phần tử có chỉ mục không phải là tên biến.
Miền văn bản của chương trình AWK; được sử dụng để tìm các bản dịch được bản địa hóa cho các chuỗi của chương trình.
Mảng được đăng ký với một biểu thức nằm giữa dấu ngoặc vuông ([ và ]). Nếu biểu thức là một danh sách biểu thức (expr, expr . . .) thì chỉ số dưới mảng là một chuỗi bao gồm phép nối của (chuỗi) giá trị của mỗi biểu thức, được phân tách bằng giá trị của biến SUBSEP. Cơ sở này được sử dụng để mô phỏng các mảng có nhiều kích thước. Ví dụ:
i = "A"; j = "B"; k = "C"
x[i, j, k] = "hello, world\n"
gán chuỗi "hello, world\n" cho phần tử của mảng x được lập chỉ mục bởi chuỗi "A\034B\034C". Tất cả các mảng trong AWK là kết hợp, nghĩa là, được lập chỉ mục bởi các giá trị chuỗi.
Toán tử đặc biệt in có thể được sử dụng để kiểm tra xem một mảng có chỉ mục bao gồm một giá trị cụ thể hay không:
if (val in array) print array[val]
Nếu mảng có nhiều chỉ số con, hãy sử dụng (i, j) trong mảng.
Cấu trúc in cũng có thể được sử dụng trong vòng lặp for để lặp qua tất cả các phần tử của một mảng. Tuy nhiên, cấu trúc (i, j) trong mảng chỉ hoạt động trong các thử nghiệm, không hoạt động trong các vòng lặp for.
Có thể xóa một phần tử khỏi mảng bằng câu lệnh delete. Câu lệnh delete cũng có thể được sử dụng để xóa toàn bộ nội dung của một mảng, chỉ bằng cách chỉ định tên mảng mà không có chỉ số dưới.
gawk hỗ trợ mảng đa chiều thực sự. Nó không yêu cầu các mảng như vậy phải là ``hình chữ nhật'' như trong C hoặc C++. Xem https://www.gnu.org/software/gawk/manual/html_node/Arrays để biết chi tiết.
Gawk cung cấp tiện ích không gian tên đơn giản để giúp giải quyết vấn đề thực tế là tất cả các biến trong AWK đều là toàn cầu.
tên đủ điều kiện bao gồm hai số nhận dạng đơn giản được nối với nhau bằng dấu hai chấm (::). Mã định danh bên trái đại diện cho không gian tên và mã định danh bên phải là biến bên trong nó. Tất cả các tên đơn giản (không đủ điều kiện) được coi là nằm trong không gian tên ``hiện tại''; không gian tên mặc định là awk. Tuy nhiên, các mã định danh đơn giản chỉ bao gồm các chữ cái viết hoa sẽ bị buộc vào không gian tên awk, ngay cả khi không gian tên hiện tại khác.
Bạn thay đổi không gian tên hiện tại bằng một lệnh @namespace "name ".
Các tên hàm dựng sẵn chuẩn được xác định trước có thể không được sử dụng làm tên vùng tên. Tên của các chức năng bổ sung do gawk cung cấp có thể được sử dụng làm tên vùng tên hoặc làm mã định danh đơn giản trong các vùng tên khác. Để biết thêm chi tiết, hãy xem https://www.gnu.org/software/gawk/manual/html_node/Namespaces.html#Namespaces.
Các biến và trường có thể là số (dấu chấm động), hoặc chuỗi hoặc cả hai. Chúng cũng có thể là biểu thức chính quy. Làm thế nào giá trị của một biến được giải thích phụ thuộc vào ngữ cảnh của nó. Nếu được sử dụng trong một biểu thức số, nó sẽ được coi là một số; nếu được sử dụng như một chuỗi, nó sẽ được coi là một chuỗi.
Để buộc một biến được coi là một số, hãy thêm số 0 vào biến đó; để buộc nó được coi là một chuỗi, hãy nối nó với chuỗi null.
Các biến chưa được khởi tạo có giá trị số bằng 0 và giá trị chuỗi "" (chuỗi null hoặc rỗng).
Khi một chuỗi phải được chuyển đổi thành một số, quá trình chuyển đổi được thực hiện bằng cách sử dụng strtod(3). Một số được chuyển đổi thành một chuỗi bằng cách sử dụng giá trị của CONVFMT làm chuỗi định dạng cho sprintf(3), với giá trị số của biến làm đối số. Tuy nhiên, mặc dù tất cả các số trong AWK đều là số thực, các giá trị tích phân luôn được chuyển đổi thành số nguyên.
Gawk thực hiện so sánh như sau: Nếu hai biến là số, chúng được so sánh bằng số. Nếu một giá trị là số và giá trị kia có giá trị chuỗi là “chuỗi số”, thì việc so sánh cũng được thực hiện bằng số. Mặt khác, giá trị số được chuyển thành chuỗi và so sánh chuỗi được thực hiện. Tất nhiên, hai chuỗi được so sánh như các chuỗi.
Lưu ý rằng các hằng chuỗi, chẳng hạn như "57", không phải chuỗi số, chúng là các hằng chuỗi. Ý tưởng về "chuỗi số " chỉ áp dụng cho các trường, đầu vào getline, FILENAME, phần tử ARGV, phần tử ENVIRON và các phần tử của mảng được tạo bởi split() hoặc patsplit() là các chuỗi số. Ý tưởng cơ bản là đầu vào của người dùng và chỉ đầu vào của người dùng, trông giống số, mới được xử lý theo cách đó.
Bạn có thể sử dụng các hằng số bát phân và thập lục phân kiểu C trong mã nguồn chương trình AWK của mình. Ví dụ: giá trị bát phân 011 bằng số thập phân 9 và giá trị thập lục phân 0x11 bằng số thập phân 17.
Hằng số chuỗi trong AWK là các chuỗi ký tự nằm giữa dấu ngoặc kép (như "value"). Trong các chuỗi, một số trình tự thoát nhất định được nhận dạng, như trong C. Xem https://www.gnu.org/software/gawk/manual/html_node/Escape-Sequences để biết chi tiết.
Hằng biểu thức chính quy là một chuỗi các ký tự nằm giữa các dấu gạch chéo lên phía trước (như /value/).
Các chuỗi thoát được mô tả trong sách hướng dẫn cũng có thể được sử dụng bên trong các biểu thức chính quy không đổi (ví dụ: /[ \t\f\n\r\v]/ khớp với các ký tự khoảng trắng).
Gawk cung cấp các hằng số biểu thức chính quy được gõ mạnh. Chúng được viết bằng ký hiệu @ ở đầu (như vậy: @/value/). Các hằng số như vậy có thể được gán cho các đại lượng vô hướng (biến, phần tử mảng) và được chuyển đến các hàm do người dùng xác định. Các biến đã được gán như vậy có kiểu biểu thức chính quy.
AWK là một ngôn ngữ hướng dòng. Mô hình đến trước, và sau đó là hành động. Các tuyên bố hành động được đính kèm trong { và }. Có thể thiếu mẫu hoặc thiếu hành động, nhưng tất nhiên, không phải cả hai. Nếu mẫu bị thiếu, hành động sẽ thực thi cho mọi bản ghi đầu vào. Một hành động bị thiếu tương đương với
{ print }trong đó in toàn bộ bản ghi.
Nhận xét bắt đầu bằng ký tự # và tiếp tục cho đến cuối dòng. Các dòng trống có thể được sử dụng để phân tách các câu lệnh. Thông thường, một câu lệnh kết thúc bằng một dòng mới, tuy nhiên, đây không phải là trường hợp đối với các dòng kết thúc bằng dấu phẩy, {, ?, :, && hoặc ||. Các dòng kết thúc bằng do hoặc else cũng có câu lệnh tự động tiếp tục ở dòng tiếp theo. Trong các trường hợp khác, một dòng có thể được tiếp tục bằng cách kết thúc nó bằng dấu “\”, trong trường hợp đó, dòng mới sẽ bị bỏ qua. Tuy nhiên, “\ ” sau # không có gì đặc biệt.
Nhiều câu lệnh có thể được đặt trên một dòng bằng cách tách chúng bằng dấu “; ”. Điều này áp dụng cho cả các câu lệnh trong phần hành động của cặp mẫu-hành động (trường hợp thông thường) và cho chính các câu lệnh mẫu-hành động.
Các mẫu AWK có thể là một trong các mẫu sau:
BEGIN END BEGINFILE ENDFILE /regular expression/ relational expression pattern && pattern pattern || pattern pattern ? pattern : pattern (pattern) ! pattern pattern1, pattern2
BEGIN và END là hai loại mẫu đặc biệt không được kiểm tra đối với đầu vào. Các phần hành động của tất cả các mẫu BEGIN được hợp nhất như thể tất cả các câu lệnh đã được viết trong một quy tắc BEGIN duy nhất. Chúng được thực thi trước khi bất kỳ đầu vào nào được đọc. Tương tự, tất cả các quy tắc END được hợp nhất và được thực thi khi tất cả dữ liệu đầu vào đã hết (hoặc khi một câu lệnh exit được thực thi). Không thể kết hợp các mẫu BEGIN và END với các mẫu khác trong biểu thức mẫu. Các mẫu BEGIN và END không được thiếu các phần hành động.
BEGINFILE và ENDFILE là các mẫu đặc biệt bổ sung có hành động được thực thi trước khi đọc bản ghi đầu tiên của mỗi tệp đầu vào dòng lệnh và sau khi đọc bản ghi cuối cùng của mỗi tệp. Bên trong quy tắc BEGINFILE, giá trị của ERRNO là chuỗi trống nếu tệp được mở thành công. Mặt khác, có một số vấn đề với tệp và mã nên sử dụng nextfile để bỏ qua nó. Nếu điều đó không được thực hiện, gawk sẽ tạo ra lỗi nghiêm trọng thông thường đối với các tệp không thể mở được.
Đối với các mẫu /biểu thức chính quy/, câu lệnh liên kết được thực thi cho từng bản ghi đầu vào khớp với biểu thức chính quy. Các biểu thức chính quy về cơ bản giống như các biểu thức trong egrep(1). Xem https://www.gnu.org/software/gawk/manual/html_node/Regexp.html để biết chi tiết về biểu thức chính quy.
Một biểu thức quan hệ có thể sử dụng bất kỳ toán tử nào được định nghĩa bên dưới trong phần hành động. Chúng thường kiểm tra xem các trường nhất định có khớp với các biểu thức chính quy nhất định hay không.
Các toán tử &&, || và ! lần lượt là logic AND, logic OR và logic NOT như trong C. Chúng thực hiện đánh giá ngắn mạch, cũng như trong C và được sử dụng để kết hợp các biểu thức mẫu nguyên thủy hơn. Như trong hầu hết các ngôn ngữ, dấu ngoặc đơn có thể được sử dụng để thay đổi thứ tự đánh giá.
Các? Toán tử : giống như toán tử tương tự trong C. Nếu mẫu đầu tiên là true thì mẫu được sử dụng để kiểm tra là mẫu thứ hai, nếu không thì mẫu thứ ba. Chỉ một trong các mẫu thứ hai và thứ ba được đánh giá.
Dạng mẫu1, mẫu2 của một biểu thức được gọi là mẫu phạm vi. Nó so khớp tất cả các bản ghi đầu vào bắt đầu bằng một bản ghi khớp với pattern1 và tiếp tục cho đến khi bao gồm cả một bản ghi khớp với pattern2. Nó không kết hợp với bất kỳ loại biểu thức mẫu nào khác.
Các câu lệnh hành động được đặt trong dấu ngoặc nhọn, { và }. Các câu lệnh hành động bao gồm các câu lệnh gán, điều kiện và vòng lặp thông thường được tìm thấy trong hầu hết các ngôn ngữ. Các toán tử, câu lệnh điều khiển và câu lệnh đầu vào/đầu ra có sẵn được tạo mẫu sau các câu lệnh trong C.
Các toán tử trong AWK, theo thứ tự ưu tiên giảm dần, là:
nhóm
Lĩnh vực tham khảo.
Tăng và giảm, cả tiền tố và hậu tố.
lũy thừa.
Phép cộng đơn phương, phép trừ đơn phương và phép phủ định logic.
Phép nhân, phép chia và mô đun.
Cộng và trừ.
Nối chuỗi.
I/O được dẫn ống cho getline, print và printf.
Các toán tử quan hệ thông thường.
Đối sánh cụm từ thông dụng, đối sánh phủ định.
Thành viên mảng.
logic VÀ.
HAY logic.
Biểu thức điều kiện C. Cái này có dạng expr1 ? expr2 : expr3 . Nếu expr1 là true, thì giá trị của biểu thức là expr2, nếu không thì giá trị là expr3. Chỉ một trong số expr2 và expr3 được đánh giá.
Phân công. Cả phép gán tuyệt đối (var=value) và phép gán toán tử (các dạng khác) đều được hỗ trợ.
Các câu lệnh kiểm soát như sau:
if (condition) statement [ else statement ] while (condition) statement do statement while (condition) for (expr1; expr2; expr3) statement for (var in array) statement break continue delete array [ index ] delete array exit [ expression ] { statements } switch (expression) { case value|regex : statement . . . [ default: statement ] }
Các câu lệnh đầu vào/đầu ra như sau:
Đóng một tệp, đường dẫn hoặc đồng xử lý đang mở. Chỉ nên sử dụng tùy chọn cách thức khi đóng một đầu của đường ống hai chiều thành đồng xử lý. Nó phải là một giá trị chuỗi, "đến" hoặc "từ".
Đặt $0 từ bản ghi đầu vào tiếp theo; đặt NF, NR, FNR, RT.
Đặt $0 từ bản ghi tiếp theo của tệp; đặt NF, RT.
Đặt var từ bản ghi đầu vào tiếp theo; đặt NR, FNR, RT.
Đặt var từ bản ghi tiếp theo của file; đặt RT.
Chạy command, chuyển đầu ra thành $0 hoặc var, như trên và RT.
Chạy command dưới dạng đồng xử lý chuyển đầu ra thành $0 hoặc var, như trên và RT. (Lệnh cũng có thể là một ổ cắm. Xem tiểu mục Tên tệp đặc biệt bên dưới.)
Xóa bất kỳ bộ đệm nào được liên kết với tệp đầu ra đang mở hoặc tệp đường ống. Nếu tệp bị thiếu hoặc nếu đó là chuỗi null, thì hãy xóa tất cả các tệp và đường dẫn đầu ra đang mở.
Dừng xử lý bản ghi đầu vào hiện tại. Đọc bản ghi đầu vào tiếp theo và bắt đầu xử lý lại với mẫu đầu tiên trong chương trình AWK. Khi đến cuối dữ liệu đầu vào, hãy thực hiện (các) quy tắc END bất kỳ.
Dừng xử lý tệp đầu vào hiện tại. Bản ghi đầu vào tiếp theo được đọc đến từ tệp đầu vào tiếp theo. Cập nhật FILENAME và ARGIND, đặt lại FNR thành 1 và bắt đầu xử lý lại với mẫu đầu tiên trong chương trình AWK. Khi đến cuối dữ liệu đầu vào, hãy thực hiện (các) quy tắc ENDFILE và END bất kỳ.
In bản ghi hiện tại. Bản ghi đầu ra kết thúc với giá trị ORS.
In biểu thức. Mỗi biểu thức được phân tách bằng giá trị của OFS. Bản ghi đầu ra kết thúc với giá trị ORS.
In biểu thức trên tệp. Mỗi biểu thức được phân tách bằng giá trị của OFS. Bản ghi đầu ra kết thúc với giá trị ORS.
Định dạng và in.
Định dạng và in trên tệp.
Thực hiện lệnh cmd-line và trả về trạng thái thoát. (Điều này có thể không khả dụng trên các hệ thống không phải POSIX.) Xem https://www.gnu.org/software/gawk/manual/html_node/I_002fO-Functions.html#I_002fO-Functions để biết chi tiết đầy đủ về trạng thái thoát.
Cho phép chuyển hướng đầu ra bổ sung cho print và printf.
Nối đầu ra vào tệp.
Viết trên một đường ống.
Gửi dữ liệu đến một đồng xử lý hoặc ổ cắm. (Xem thêm tiểu mục Tên tệp đặc biệt bên dưới.)
Lệnh getline trả về 1 nếu thành công, 0 ở cuối tệp và -1 nếu có lỗi. Nếu giá trị errno(3) cho biết rằng thao tác I/O có thể được thử lại và PROCINFO["input ", "RETRY"] được đặt, thì -2 được trả về thay vì -1 và có thể thực hiện thêm lệnh gọi getline. Khi xảy ra lỗi, ERRNO được đặt thành chuỗi mô tả sự cố.
LƯU Ý: Không thể mở ổ cắm hai chiều dẫn đến lỗi không nghiêm trọng được trả về chức năng gọi. Nếu sử dụng đường dẫn, đồng xử lý hoặc ổ cắm cho getline hoặc từ print hoặc printf trong một vòng lặp, bạn phải sử dụng close() để tạo phiên bản mới của lệnh hoặc ổ cắm. AWK không tự động đóng đường ống, ổ cắm hoặc đồng xử lý khi chúng trả về EOF.
Các phiên bản AWK của câu lệnh printf và hàm sprintf() tương tự như của C. Để biết chi tiết, hãy xem https://www.gnu.org/ phần mềm/gawk/manual/html_node/Printf.html.
Khi thực hiện chuyển hướng I/O từ print hoặc printf vào một tệp hoặc qua getline từ một tệp, trố mắt nhận ra một số tên tệp đặc biệt trong nội bộ. Các tên tệp này cho phép truy cập vào các bộ mô tả tệp mở được kế thừa từ quy trình gốc của gawk (thường là trình bao). Các tên tệp này cũng có thể được sử dụng trên dòng lệnh để đặt tên cho các tệp dữ liệu. Tên tệp là:
Đầu vào tiêu chuẩn.
Đầu vào tiêu chuẩn.
Đầu ra tiêu chuẩn.
Đầu ra lỗi tiêu chuẩn.
Tệp được liên kết với bộ mô tả tệp đang mở n.
Các tên tệp đặc biệt sau đây có thể được sử dụng với toán tử đồng xử lý |& để tạo kết nối mạng TCP/IP:
/inet/tcp/lport/rhost/rport /inet4/tcp/lport/rhost/rport /inet6/tcp/lport/rhost/rport
Tệp dành cho kết nối TCP/IP trên cổng cục bộ lport tới máy chủ từ xa rhost trên cổng từ xa rport. Sử dụng cổng 0 để hệ thống chọn một cổng. Sử dụng /inet4 để buộc kết nối IPv4 và /inet6 để buộc kết nối IPv6. /inet thuần túy sử dụng mặc định của hệ thống (rất có thể là IPv4). Chỉ sử dụng được với toán tử I/O hai chiều |&.
/inet/udp/lport/rhost/rport /inet4/udp/lport/rhost/rport /inet6/udp/lport/rhost/rport
Tương tự, nhưng sử dụng UDP/IP thay vì TCP/IP.
AWK có các hàm số học tích hợp sau:
Trả về arctang của y/x theo đơn vị radian.
Trả về cosin của expr, tính bằng radian.
Hàm số mũ.
Cắt bớt thành số nguyên.
Cắt bớt num và denom thành số nguyên. Trả về thương của num chia cho denom trong kết quả["quotient"] và phần còn lại trong kết quả["remainder"]. Đây là phần mở rộng gawk, chủ yếu có giá trị khi làm việc với các số nguyên lớn tùy ý.
Hàm logarit tự nhiên.
Trả về một số ngẫu nhiên N, giữa 0 và 1, sao cho 0 ≤ N < 1.
Trả về sin của expr, tính bằng radian.
Trả về căn bậc hai của expr.
Sử dụng expr làm nguồn gốc mới cho trình tạo số ngẫu nhiên. Nếu không có expr nào được cung cấp, hãy sử dụng thời gian trong ngày. Trả lại hạt giống trước đó cho trình tạo số ngẫu nhiên.
Gawk có các hàm chuỗi dựng sẵn sau đây; chi tiết được cung cấp trong https://www.gnu.org/software/gawk/manual/html_node/String-Functions.
Trả về số phần tử trong mảng nguồn s. Sắp xếp nội dung của s bằng cách sử dụng các quy tắc thông thường của gawk để so sánh các giá trị và thay thế các chỉ số của các giá trị được sắp xếp s bằng các số nguyên tuần tự bắt đầu bằng 1. Nếu mảng đích tùy chọn d được chỉ định, trước tiên hãy sao chép s thành d, sau đó sắp xếp d, giữ nguyên các chỉ số của mảng nguồn s. Chuỗi tùy chọn how kiểm soát hướng và chế độ so sánh. Các giá trị hợp lệ cho cách thức được mô tả trong https://www.gnu.org/software/gawk/manual/html_node/String-Functions.html#String-Functions. s và d được phép là cùng một mảng; điều này chỉ có ý nghĩa khi cung cấp đối số thứ ba.
Trả về số phần tử trong mảng nguồn s. Hành vi giống như hành vi của asort(), ngoại trừ việc mảng chỉ số được sử dụng để sắp xếp, không phải giá trị mảng. Khi hoàn tất, mảng được lập chỉ mục bằng số và các giá trị là giá trị của các chỉ mục ban đầu. Các giá trị ban đầu bị mất; do đó cung cấp mảng thứ hai nếu bạn muốn giữ nguyên mảng gốc. Mục đích của chuỗi tùy chọn how cũng giống như đối với asort(). Ở đây cũng vậy, s và d được phép là cùng một mảng; điều này chỉ có ý nghĩa khi cung cấp đối số thứ ba.
Tìm chuỗi mục tiêu t để tìm kết quả khớp của biểu thức chính quy r. Nếu h là một chuỗi bắt đầu bằng g hoặc G, thì hãy thay thế tất cả các kết quả khớp của r bằng s. Mặt khác, h là một số cho biết kết quả khớp của r để thay thế. Nếu t không được cung cấp, hãy sử dụng $0 để thay thế. Trong văn bản thay thế s, chuỗi \n, trong đó n là một chữ số từ 1 đến 9, có thể được sử dụng để chỉ ra văn bản khớp với biểu thức con được đặt trong ngoặc đơn n. Chuỗi \0 đại diện cho toàn bộ văn bản phù hợp, cũng như ký tự &. Không giống như sub() và gsub(), chuỗi đã sửa đổi được trả về là kết quả của hàm và chuỗi đích ban đầu không bị thay đổi.
Đối với mỗi chuỗi con khớp với biểu thức chính quy r trong chuỗi t, hãy thay thế chuỗi s và trả về số lần thay thế. Nếu t không được cung cấp, hãy sử dụng $0. Một & trong văn bản thay thế được thay thế bằng văn bản thực sự khớp. Sử dụng \& để nhận & theo nghĩa đen. (Phần này phải được nhập là "\\&"; xem https://www.gnu.org/software/gawk/manual/html_node/Gory-Details.html#Gory-Details để biết phần thảo luận đầy đủ hơn về các quy tắc đối với dấu và và dấu gạch chéo ngược trong văn bản thay thế của sub(), gsub() và gensub().)
Trả về chỉ số của chuỗi t trong chuỗi s hoặc bằng 0 nếu không có t. (Điều này ngụ ý rằng các chỉ số ký tự bắt đầu từ một.)
Trả về độ dài của chuỗi s hoặc độ dài của $0 nếu s không được cung cấp. Với một đối số mảng, length() trả về số phần tử trong mảng.
Trả về vị trí trong s khi biểu thức chính quy r xuất hiện hoặc trả về 0 nếu không có r và đặt các giá trị của RSTART và SỐ LƯỢNG. Lưu ý rằng thứ tự đối số giống như đối với toán tử ~: str ~ re.
Xem https://www.gnu.org/software/gawk/manual/html_node/String-Functions.html#String-Functions để biết mô tả về cách mảng a được lấp đầy nếu nó được cung cấp.
Tách chuỗi s thành mảng a và mảng dấu phân cách seps trên biểu thức chính quy r và trả về số trường. Giá trị phần tử là các phần của s khớp với r. Giá trị của seps[i] là dấu phân cách null có thể xuất hiện sau a[i]. Giá trị của seps[0] có thể là dấu phân cách null ở đầu. Nếu r bị bỏ qua, thì FPAT sẽ được sử dụng thay thế. Các mảng a và seps sẽ bị xóa trước. Quá trình tách hoạt động giống hệt với quá trình tách trường bằng FPAT.
Tách chuỗi s thành mảng a và mảng dấu phân cách seps trên biểu thức chính quy r và trả về số trường. Nếu r bị bỏ qua, thì FS sẽ được sử dụng thay thế. Các mảng a và seps sẽ bị xóa trước. seps[i] là dấu tách trường khớp với r giữa a[i] và a[i+1]. Việc tách hoạt động giống hệt với việc tách trường.
In expr-list theo fmt và trả về chuỗi kết quả.
Kiểm tra str và trả về giá trị số của nó. Nếu str bắt đầu bằng 0 đứng đầu, hãy coi đó là một số bát phân. Nếu str bắt đầu bằng 0x hoặc 0X ở đầu, hãy coi đó là số thập lục phân. Mặt khác, giả sử nó là một số thập phân.
Giống như gsub(), nhưng chỉ thay thế chuỗi con khớp đầu tiên. Trả về số không hoặc một.
Trả về tối đa nchuỗi con ký tự của s bắt đầu từ i. Nếu n bị bỏ qua, hãy sử dụng phần còn lại của s.
Trả về một bản sao của chuỗi str, với tất cả các ký tự viết hoa trong str được dịch sang ký tự viết thường tương ứng của chúng. Các ký tự không thuộc bảng chữ cái được giữ nguyên.
Trả về một bản sao của chuỗi str, với tất cả các ký tự chữ thường trong str được dịch sang ký tự viết hoa tương ứng của chúng. Các ký tự không thuộc bảng chữ cái được giữ nguyên.
Gawk nhận biết được nhiều byte. Điều này có nghĩa là index(), length(), substr() và match() đều hoạt động theo thuật ngữ ký tự, không phải byte.
Gawk cung cấp các chức năng sau để lấy dấu thời gian và định dạng chúng. Thông tin chi tiết được cung cấp trong https://www.gnu.org/software/gawk/manual/html_node/Time-Functions.
Biến datespec thành dấu thời gian có cùng dạng như được trả về bởi systime() và trả về kết quả. Nếu có utc-flag và khác 0 hoặc khác null, thì thời gian được coi là ở múi giờ UTC; mặt khác, thời gian được giả định là theo múi giờ địa phương. Nếu datespec không chứa đủ các phần tử hoặc nếu thời gian kết quả nằm ngoài phạm vi, mktime() trả về -1. Xem https://www.gnu.org/software/gawk/manual/html_node/Time-Functions.html#Time-Functions để biết chi tiết về datespec.
Định dạng dấu thời gian theo thông số kỹ thuật trong định dạng. Nếu có utc-flag và khác 0 hoặc khác null, kết quả sẽ là UTC, nếu không thì kết quả là giờ địa phương. dấu thời gian phải có cùng dạng như được trả về bởi systime(). Nếu dấu thời gian bị thiếu, thời gian hiện tại trong ngày sẽ được sử dụng. Nếu thiếu định dạng, định dạng mặc định tương đương với đầu ra của ngày(1) sẽ được sử dụng. Định dạng mặc định có sẵn trong PROCINFO["strftime"]. Xem thông số kỹ thuật cho hàm strftime() trong ISO C để biết các chuyển đổi định dạng được đảm bảo khả dụng.
Trả về thời gian hiện tại trong ngày dưới dạng số giây kể từ Epoch (1970-01-01 00:00:00 UTC trên hệ thống POSIX).
Gawk cung cấp các hàm thao tác bit sau. Chúng hoạt động bằng cách chuyển đổi các giá trị dấu phẩy động có độ chính xác kép thành số nguyên uintmax_t, thực hiện thao tác rồi chuyển đổi kết quả trở lại thành dấu phẩy động. Việc chuyển toán hạng âm cho bất kỳ chức năng nào trong số này sẽ gây ra lỗi nghiêm trọng.
Các chức năng là:
Trả về AND theo bit của các giá trị được cung cấp trong danh sách đối số. Phải có ít nhất hai.
Trả về phần bù theo bit của val.
Trả về giá trị của val, được dịch sang trái bởi các bit count.
Trả về OR theo bit của các giá trị được cung cấp trong danh sách đối số. Phải có ít nhất hai.
Trả về giá trị của val, được dịch sang phải bởi count bit.
Trả về XOR theo bit của các giá trị được cung cấp trong danh sách đối số. Phải có ít nhất hai.
Các hàm sau đây cung cấp thông tin liên quan đến kiểu về các đối số của chúng.
Trả về true nếu x là một mảng, ngược lại trả về false.
Trả về một chuỗi cho biết loại x. Chuỗi sẽ là một trong "mảng", "số", "regexp", "chuỗi", "strnum", "chưa được chỉ định" hoặc "không xác định".
Các chức năng sau có thể được sử dụng từ bên trong chương trình AWK của bạn để dịch các chuỗi trong thời gian chạy. Để biết đầy đủ chi tiết, hãy xem https://www.gnu.org/software/gawk/manual/html_node/I18N-Functions.html#I18N-Functions.
Chỉ định thư mục nơi gawk tìm các tệp .gmo, trong trường hợp chúng không hoặc không thể được đặt ở các vị trí ``tiêu chuẩn''. Nó trả về thư mục nơi miền bị ``giới hạn''
miền mặc định là giá trị của TEXTDOMAIN. Nếu thư mục là chuỗi rỗng (""), thì bindtextdomain() trả về liên kết hiện tại cho miền đã cho .
Trả lại bản dịch của chuỗi trong miền văn bản miền cho danh mục ngôn ngữ danh mục. Giá trị mặc định cho miền là giá trị hiện tại của TEXTDOMAIN. Giá trị mặc định cho danh mục là "LC_MESSAGES".
Trả về dạng số nhiều được sử dụng cho số của bản dịch string1 và string2 trong miền văn bản domain cho danh mục ngôn ngữ category. Giá trị mặc định cho miền là giá trị hiện tại của TEXTDOMAIN. Giá trị mặc định cho danh mục là "LC_MESSAGES".
Bạn có thể tạo các giá trị kiểu Boolean đặc biệt; xem hướng dẫn để biết cách chúng hoạt động và tại sao chúng tồn tại.
Dựa trên giá trị boolean của biểu thức trả về giá trị đúng hoặc giá trị sai. Giá trị thực có giá trị số một. Giá trị sai có giá trị số bằng không.
Các chức năng trong AWK được định nghĩa như sau:
hàm tên(danh sách tham số) { câu lệnh }
Các hàm thực thi khi chúng được gọi từ bên trong các biểu thức theo mẫu hoặc hành động. Các tham số thực tế được cung cấp trong lệnh gọi hàm được sử dụng để khởi tạo các tham số hình thức được khai báo trong hàm. Mảng được truyền theo tham chiếu, các biến khác được truyền theo giá trị.
Các biến cục bộ được khai báo như các tham số phụ trong danh sách tham số. Quy ước là tách các biến cục bộ khỏi các tham số thực bằng khoảng trắng thừa trong danh sách tham số. Ví dụ:
function f(p, q, a, b) # a and b are local { . . . } /abc/ { . . . ; f(1, 2) ; . . . }
Dấu ngoặc đơn bên trái trong một lệnh gọi hàm được yêu cầu ngay sau tên hàm mà không có bất kỳ khoảng trắng xen vào nào. Hạn chế này không áp dụng cho các chức năng tích hợp được liệt kê ở trên.
Các chức năng có thể gọi lẫn nhau và có thể đệ quy. Các tham số chức năng được sử dụng làm biến cục bộ được khởi tạo thành chuỗi null và số 0 khi gọi hàm.
Sử dụng return expr để trả về giá trị từ một hàm. Giá trị trả về không được xác định nếu không có giá trị nào được cung cấp hoặc nếu hàm trả về bằng cách "rơi ra" ở cuối.
Các chức năng có thể được gọi một cách gián tiếp. Để thực hiện việc này, hãy gán tên của hàm được gọi, dưới dạng một chuỗi, cho một biến. Sau đó, hãy sử dụng biến như thể nó là tên của một hàm, có thêm dấu @ ở đầu, như sau:
function myfunc() { print "myfunc called" . . . } { . . . the_func = "myfunc" @the_func() # call through the_func to myfunc . . . }
Nếu - -lint đã được cung cấp, gawk sẽ cảnh báo về các lệnh gọi đến hàm không xác định tại thời điểm phân tích cú pháp, thay vì tại thời điểm chạy. Gọi một chức năng không xác định trong thời gian chạy là một lỗi nghiêm trọng.
Bạn có thể tự động thêm các hàm mới được viết bằng C hoặc C++ vào trình thông dịch gawk đang chạy bằng câu lệnh @load. Các chi tiết đầy đủ nằm ngoài phạm vi của trang hướng dẫn này; xem https://www.gnu.org/software/gawk/manual/html_node/Dynamic-Extensions.html#Dynamic-Extensions.
Trình hồ sơ gawk chấp nhận hai tín hiệu. SIGUSR1 làm cho nó kết xuất ngăn xếp lệnh gọi hàm và cấu hình vào tệp cấu hình, đó là awkprof.out hoặc bất kỳ tệp nào được đặt tên bằng - -profile tùy chọn. Sau đó nó tiếp tục chạy. SIGHUP khiến trố mắt kết xuất cấu hình và ngăn xếp lệnh gọi hàm rồi thoát.
Hằng chuỗi là dãy các ký tự được đặt trong dấu ngoặc kép. Trong các môi trường không nói tiếng Anh, có thể đánh dấu các chuỗi trong chương trình AWK là yêu cầu dịch sang ngôn ngữ tự nhiên địa phương. Các chuỗi như vậy được đánh dấu trong chương trình AWK bằng dấu gạch dưới ở đầu (“_”). Ví dụ,
gawk 'BEGIN { print "hello, world" }'luôn in xin chào thế giới. Nhưng,
gawk 'BEGIN { print _"hello, world" }'có thể in bonjour, monde ở Pháp. Xem https://www.gnu.org/software/gawk/manual/html_node/Internationalization.html#Internationalization để biết các bước liên quan đến việc sản xuất và chạy chương trình AWK có thể bản địa hóa.
Gawk có quá nhiều tiện ích mở rộng cho POSIX awk. Chúng được mô tả trong https://www.gnu.org/software/gawk/manual/html_node/POSIX_002fGNU.html. Tất cả các tiện ích mở rộng có thể bị vô hiệu hóa bằng cách gọi gawk bằng các tùy chọn - -truyền thống hoặc - -posix.
Biến môi trường AWKPATH có thể được sử dụng để cung cấp danh sách các thư mục mà gawk tìm kiếm khi tìm tệp có tên qua các tùy chọn -f, - -file, -i và - --include và chỉ thị @include. Nếu tìm kiếm ban đầu không thành công, đường dẫn sẽ được tìm kiếm lại sau khi thêm .awk vào tên tệp.
Biến môi trường AWKLIBPATH có thể được sử dụng để cung cấp danh sách các thư mục mà trố mắt tìm kiếm khi tìm tệp được đặt tên qua -l và - -tải tùy chọn.
Biến môi trường GAWK_PERSIST_FILE, nếu có, chỉ định một tệp sẽ sử dụng làm kho lưu trữ dự phòng cho bộ nhớ liên tục. Đây là tính năng thử nghiệm. Xem GAWK: Lập trình AWK hiệu quả để biết chi tiết.
Biến môi trường GAWK_READ_TIMEOUT có thể được sử dụng để chỉ định thời gian chờ tính bằng mili giây để đọc đầu vào từ thiết bị đầu cuối, đường ống hoặc giao tiếp hai chiều bao gồm cả ổ cắm.
Để kết nối với máy chủ từ xa qua ổ cắm, GAWK_SOCK_RETRIES kiểm soát số lần thử lại và GAWK_MSEC_SLEEP khoảng thời gian giữa các lần thử lại. Khoảng thời gian tính bằng mili giây. Trên các hệ thống không hỗ trợ giấc ngủ(3), giá trị được làm tròn thành một số nguyên của giây.
Nếu POSIXLY_CORRECT tồn tại trong môi trường, thì gawk hoạt động chính xác như thể - -posix đã được chỉ định trên dòng lệnh. Nếu - -lint đã được chỉ định, gawk đưa ra thông báo cảnh báo về hiệu ứng này.
Đặt GAWK_NO_MPFR_WARN trong môi trường để tắt cảnh báo về chế độ MPFR không được dùng nữa.
Nếu câu lệnh exit được sử dụng với một giá trị, thì gawk sẽ thoát với giá trị số được cung cấp cho nó.
Mặt khác, nếu không có vấn đề gì trong quá trình thực thi, gawk sẽ thoát với giá trị của hằng số C EXIT_SUCCESS. Điều này thường bằng không.
Nếu xảy ra lỗi, gawk sẽ thoát với giá trị của hằng số C EXIT_FAILURE. Đây thường là một.
Nếu gawk thoát do lỗi nghiêm trọng, thì trạng thái thoát là 2. Trên các hệ thống không phải POSIX, giá trị này có thể được ánh xạ tới EXIT_FAILURE.
Trang hướng dẫn này ghi lại tài liệu gawk, phiên bản 5.2.
Phiên bản gốc của UNIX awk do Alfred Aho, Peter Weinberger và Brian Kernighan của Phòng thí nghiệm Bell thiết kế và triển khai. Brian Kernighan tiếp tục duy trì và nâng cao nó.
Paul Rubin và Jay Fenlason, của Tổ chức Phần mềm Tự do, đã viết gawk, để tương thích với phiên bản gốc của awk được phân phối trong UNIX Phiên bản Thứ bảy. John Woods đã đóng góp một số bản sửa lỗi. David Trueman, với sự đóng góp của Arnold Robbins, đã làm cho gawk tương thích với phiên bản mới của UNIX awk. Arnold Robbins là người duy trì hiện tại.
Xem GAWK: Lập trình AWK hiệu quả để biết danh sách đầy đủ những người đóng góp cho gawk và tài liệu của nó.
Xem tệp README trong bản phân phối gawk để biết thông tin cập nhật về người bảo trì và cổng nào hiện được hỗ trợ.
Nếu bạn tìm thấy lỗi trong gawk, vui lòng sử dụng chương trình gawkbug(1) để báo cáo.
Hướng dẫn đầy đủ về báo cáo lỗi được cung cấp trong https://www.gnu.org/software/gawk/manual/html_node/Bugs.html. Vui lòng đọc kỹ và làm theo các hướng dẫn được đưa ra ở đó. Điều này sẽ làm cho việc báo cáo lỗi và giải quyết dễ dàng hơn cho mọi người tham gia. Thật sự.
Tùy chọn -F không cần thiết với tính năng gán biến dòng lệnh; nó chỉ còn lại cho khả năng tương thích ngược.
Trang hướng dẫn này quá dài; trố mắt có quá nhiều tính năng.
egrep(1), sed(1), gawkbug(1), printf(3), and strftime(3).
The AWK Programming Language, Alfred V. Aho, Brian W. Kernighan, Peter J. Weinberger, Addison-Wesley, 1988. ISBN 0-201-07981-X.
GAWK: Effective AWK Programming, Edition 5.2, shipped with the gawk source. The current version of this document is available online at https://www.gnu.org/software/gawk/manual.
The GNU gettext documentation, available online at https://www.gnu.org/software/gettext.
Print and sort the login names of all users:
BEGIN { FS = ":" }
{ print $1 | "sort" }
Count lines in a file:
{ nlines++ }
END { print nlines }
Precede each line by its number in the file:
{ print FNR, $0 }
Concatenate and line number (a variation on a theme):
{ print NR, $0 }
Run an external command for particular lines of data:
tail -f access_log |
awk '/myhome.html/ { system("nmap " $1 ">> logdir/myhome.html") }'Brian Kernighan đã cung cấp hỗ trợ có giá trị trong quá trình thử nghiệm và gỡ lỗi. Chúng tôi cảm ơn anh ấy.
Bản quyền © 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002, 2003, 2004, 2005, 2007, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Tổ chức Phần mềm Tự do, Inc.
Quyền được cấp để tạo và phân phối các bản sao nguyên văn của trang hướng dẫn này miễn là thông báo bản quyền và thông báo cấp phép này được giữ nguyên trên tất cả các bản sao.
Quyền được cấp để xử lý tệp này thông qua troff và in kết quả, miễn là tài liệu in có thông báo cho phép sao chép giống với thông báo này ngoại trừ việc xóa đoạn này (đoạn này không liên quan đến trang hướng dẫn in).
Quyền được cấp để sao chép và phân phối các phiên bản đã sửa đổi của trang hướng dẫn này theo các điều kiện để sao chép nguyên văn, với điều kiện là toàn bộ tác phẩm dẫn xuất được phân phối theo các điều khoản của thông báo cấp phép giống với thông báo này.
Quyền được cấp để sao chép và phân phối bản dịch của trang hướng dẫn sử dụng này sang ngôn ngữ khác, theo các điều kiện trên đối với các phiên bản sửa đổi, ngoại trừ thông báo về quyền này có thể được nêu trong bản dịch được Tổ chức phê duyệt.