Tìm hiểu Linux Command - gawk

Tên

gawk - mô hình quét và xử lý ngôn ngữ

Tóm tắc

gawk [tùy chọn kiểu POSIX hoặc GNU] -f tập tin chương trình [ - ] ...
gawk [tùy chọn kiểu POSIX hoặc GNU] [ - ] tập tin văn bản chương trình ...

pgawk [tùy chọn kiểu POSIX hoặc GNU] -f tập tin chương trình [ - ] tập tin ...
pgawk [POSIX hoặc tùy chọn kiểu GNU] [ - ] tập tin văn bản chương trình ...

Sự miêu tả

Gawk là việc thực hiện Dự án GNU của ngôn ngữ lập trình AWK. Nó phù hợp với định nghĩa của ngôn ngữ trong Tiêu chuẩn Tiện ích và Ngôn ngữ Lệnh POSIX 1003.2. Phiên bản này lần lượt dựa trên mô tả trong Ngôn ngữ lập trình AWK , bởi Aho, Kernighan và Weinberger, với các tính năng bổ sung được tìm thấy trong phiên bản System V Release 4 của UNIX awk . Gawk cũng cung cấp các tiện ích mở rộng awk của Phòng thí nghiệm Bell gần đây và một số tiện ích mở rộng cụ thể cho GNU.

Pgawk là phiên bản định hình của chim ưng . Nó giống hệt nhau trong mọi cách để gawk , ngoại trừ các chương trình chạy chậm hơn, và nó sẽ tự động tạo ra một hồ sơ thực hiện trong tập tin awkprof.out khi thực hiện. Xem tùy chọn --profile , bên dưới.

Dòng lệnh bao gồm các tùy chọn để gawk chính nó, văn bản chương trình AWK (nếu không được cung cấp thông qua các tùy chọn -f hoặc --file ), và các giá trị được tạo sẵn trong các biến AWK ARGCARGV được xác định trước.

Định dạng tùy chọn

Tùy chọn Gawk có thể là tùy chọn một chữ cái POSIX truyền thống hoặc các tùy chọn dài kiểu GNU. Tùy chọn POSIX bắt đầu bằng một `` - '' duy nhất, 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ả hai tính năng cụ thể của GNU và cho các tính năng được ủy quyền của POSIX.

Theo tiêu chuẩn POSIX, các tùy chọn gawk -specific được cung cấp qua các đối số cho tùy chọn -W . Nhiều tùy chọn -W có thể được cung cấp Mỗi tùy chọn -W có một tùy chọn dài tương ứng, như được nêu chi tiết bên dưới. Các đối số cho các tùy chọn dài được kết hợp với tùy chọn bằng dấu = , không có khoảng trống xen kẽ 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à từ viết tắt vẫn là duy nhất.

Tùy chọn

Gawk chấp nhận các tùy chọn sau, được liệt kê theo thứ tự bảng chữ cái.

-F fs

fs-separator 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 của FS ).

-v var = val

--assign var = val Gán giá trị val cho biến var , trước khi thực thi chương trình bắt đầu. Các giá trị biến này có sẵn cho khối BEGIN của chương trình AWK.

-tập tin chương trình

--file program-file Đọc nguồn chương trình AWK từ tệp chương trình-tệp , thay vì từ đối số dòng lệnh đầu tiên. Có thể sử dụng nhiều tùy chọn -f (hoặc --file ).

-mf NNN

-mr NNN Đặt giới hạn bộ nhớ khác nhau thành giá trị NNN . Cờ f đặt số lượng trường tối đa và cờ r đặt kích thước bản ghi tối đa. Hai cờ này và tùy chọn -m là từ phiên bản nghiên cứu của UNIX Laboratories về UNIX awk . Chúng được bỏ qua bởi chim ưng , vì chim ưng không có giới hạn được xác định trước.

-W compat

-W truyền thống

--compat

--Tốc độ Run trong chế độ tương thích . Trong chế độ tương thích, gawk hoạt động giống hệt UNIX awk ; không có phần mở rộng cụ thể nào của GNU được nhận dạng. Việc sử dụng --traditional được ưu tiên hơn các dạng khác của tùy chọn này. Xem GNU EXTENSIONS bên dưới để biết thêm thông tin.

-W copyleft

-W bản quyền

--copyleft

--copyright In phiên bản ngắn của thông báo bản quyền GNU trên đầu ra tiêu chuẩn và thoát thành công.

-W dump-variables [ = tệp ]

--dump-variables [ = file ] In danh sách các biến toàn cục, loại và giá trị cuối cùng được sắp xếp của chúng. Nếu không có tệp nào được cung cấp, gawk sử dụng tệp có tên awkvars.out trong thư mục hiện tại.

Có một danh sách tất cả các biến toàn cầu là một cách tốt để tìm lỗi đánh máy trong các chương trình của bạn. Bạn cũng sẽ sử dụng tùy chọn này nếu bạn có một chương trình lớn với rất nhiều hàm, và bạn muốn chắc chắn rằng các hàm của bạn không vô tình sử dụng các biến toàn cầu mà bạn muốn trở thành cục bộ. (Đây là một sai lầm đặc biệt dễ thực hiện với các tên biến đơn giản như i , j , v.v.)

Trợ giúp -W

-W sử dụng

--Cứu giúp

--usage In một bản tóm tắt tương đối ngắn về các tùy chọn có sẵn 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 gây ra một lối thoát ngay lập tức, thành công.)

-W lint [ = gây tử vong ]

--lint [ = fatal ] Cung cấp cảnh báo về các cấu trúc không rõ ràng hoặc không di động đối với các triển khai khác của AWK. Với một đối số tùy chọn của cảnh báo tử vong , lint trở thành lỗi nghiêm trọng. Điều này có thể quyết liệt, nhưng việc sử dụng nó chắc chắn sẽ khuyến khích sự phát triển của các chương trình AWK sạch hơn.

-W tuổi

--lint-old Cung cấp cảnh báo về các cấu trúc không được di chuyển đến phiên bản gốc của Unix awk .

-W gen-po

--gen-po Quét và phân tích cú pháp chương trình AWK và tạo tệp định dạng GNU .po 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ể định vị trong chương trình. Bản thân chương trình không được thực hiện. Xem bản phân phối GNU gettext để biết thêm thông tin về các tệp .po .

-W dữ liệu không thập phân

--non-thập phân-dữ liệu Nhận biết các 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 với sự thận trọng tuyệt vời!

-W posix

--posix Điều này sẽ bật chế độ tương thích , với các hạn chế bổ sung sau đây:

*

Các chuỗi thoát x không được nhận dạng.

*

Chỉ không gian và tab hoạt động như phân cách trường khi FS được đặt thành một dấu cách, dòng mới không.

*

Bạn không thể tiếp tục các dòng sau ?:.

*

Từ đồng nghĩa func cho hàm từ khóa không được nhận dạng.

*

Các toán tử **** = không thể được sử dụng thay cho ^^ = .

*

Hàm fflush () không có sẵn.

Tiểu sử -W [ = prof_file ]

--profile [ = prof_file ] Gửi dữ liệu lược tả đến prof_file . Mặc định là awkprof.out . Khi chạy với gawk , profile chỉ là một phiên bản `` pretty printed '' của chương trình. Khi chạy với pgawk , hồ sơ chứa số lượng thực hiện của mỗi 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 định nghĩa.

-W tái khoảng thời gian

--re-interval Cho phép sử dụng các biểu thức khoảng thời gian trong đối sánh cụm từ thông dụng (xem Cụm từ thông dụng bên dưới). Biểu thức khoảng thời gian không có sẵn theo ngôn ngữ AWK. Tiêu chuẩn POSIX thêm chúng, để làm cho awkegrep phù hợp với nhau. Tuy nhiên, việc sử dụng chúng có khả năng phá vỡ các chương trình AWK cũ, do đó gawk chỉ cung cấp cho chúng nếu chúng được yêu cầu với tùy chọn này hoặc khi --posix được chỉ định.

-W -chương trình nguồn -văn bản

--source program-text Sử dụng chương trình-văn bản làm mã nguồn chương trình AWK. Tùy chọn này cho phép dễ dàng trộn các hàm thư viện (được sử dụng thông qua các tùy chọn -f--file ) với mã nguồn được nhập trên dòng lệnh. Nó được thiết kế chủ yếu cho các chương trình AWK trung bình đến lớn được sử dụng trong các kịch bản lệnh shell.

-W phiên bản

--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 cho việc biết liệu bản sao hiện tại của gawk trên hệ thống của bạn có được cập nhật liên quan đến bất cứ điều gì mà Quỹ Phần mềm Tự do đang phân phối hay không. Điều này cũng 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 gây ra một lối thoát ngay lập tức, thành công.)

- Tín hiệu kết thúc các tùy chọn. Điều này rất hữu ích để cho phép các đối số thêm vào chính chương trình AWK bắt đầu bằng một `` - ''. Điều này chủ yếu cho sự nhất quán với quy ước phân tích đối số được sử dụng bởi hầu hết các chương trình POSIX khác.

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 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 được chuyển sang chương trình AWK trong mảng ARGV để xử lý. Điều này đặc biệt hữu ích khi chạy các chương trình AWK thông qua cơ chế phiên dịch thực thi `` #! ''.

GIẢI QUYẾT CHƯƠNG TRÌNH AWK

Một chương trình AWK bao gồm một chuỗi các câu lệnh mẫu và các định nghĩa hàm tùy chọn.

pattern { action statements }

tên hàm ( danh sách tham số ) { statements }

Gawk đầu 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 --source hoặc từ đối số không tùy chọn đầu tiên trên dòng lệnh. Các tùy chọn -f--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ả các tập tin chương trình và các dòng lệnh văn bản đã được nối với nhau. Điều này rất hữu ích cho việc xây dựng các thư viện các hàm AWK, mà không cần phải bao gồm chúng trong mỗi chương trình AWK mới sử dụng chúng. Nó cũng cung cấp khả năng kết hợp các chức năng thư viện với các chương trình dòng lệnh.

Biến môi trường AWKPATH chỉ định đường dẫn tìm kiếm để sử dụng khi tìm các tệp nguồn có tên là tùy chọn -f . 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 gán cho tùy chọn -f chứa ký tự `` / '', thì không tìm kiếm đường dẫn nào được thực hiện.

Gawk thực hiện 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 được thực hiện. Tiếp theo, gawk biên dịch chương trình thành một hình thức nội bộ. Sau đó, gawk thực thi mã trong khối BEGIN (s) (nếu có), và sau đó tiến hành đọc từng tệp có tên trong mảng ARGV . Nếu không có tệp nào được đặt tên trên dòng lệnh, gawk đọc đầu vào tiêu chuẩn.

Nếu một 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ỳ khối BEGIN nào đã được chạy.) Việc gán biến dòng lệnh hữu ích nhất cho việc gán động các giá trị cho các biến mà AWK sử dụng để kiểm soát cách đầu vào được chia thành các trường và bản ghi. Nó cũng hữu ích cho việc kiểm soát trạng thái nếu cần nhiều lần truyền qua một tệp dữ liệu duy nhất.

Nếu giá trị của một phần tử cụ thể của ARGV trống ( "" ), gawk bỏ qua nó.

Đối với mỗi bản ghi trong đầu vào, kiểm tra gawk để 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 phù hợp, hành động liên quan được thực hiện. 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ả đầu vào bị cạn kiệt, gawk thực hiện mã trong khối END (s) (nếu có).

Biến, Bản ghi và Trường

Các biến AWK là động; chúng xuất hiện khi chúng được sử dụng lần đầu tiên. Giá trị của chúng là các 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. AWK cũng có mảng một chiều; các mảng có nhiều kích thước có thể được mô phỏng. Một số biến được xác định trước được đặt làm chương trình chạy; chúng sẽ được mô tả khi cần thiết và tóm tắt dưới đây.

Hồ sơ

Thông thường, các bản ghi được phân tách bằng các ký tự dòng mới. Bạn có thể kiểm soát cách các bản ghi được phân cách bằng cách gán giá trị cho biến RS tích hợp sẵn . Nếu RS là bất kỳ ký tự đơn nào, ký tự đó sẽ tách riêng các bản ghi. Nếu không, RS là một biểu thức chính quy. Văn bản trong đầu vào khớp với cụm từ thông dụng này sẽ tách bản ghi. Tuy nhiên, trong chế độ tương thích, chỉ ký tự đầu tiên của giá trị chuỗi được sử dụng để tách các bản ghi. Nếu RS được đặt thành chuỗi rỗng, thì các bản ghi được phân tách bằng các dòng trống. Khi RS được đặt thành chuỗi rỗng, ký tự dòng mới luôn hoạt động như một dấu tách trường, ngoài bất kỳ giá trị FS nào có thể có.

Lĩnh vực

Khi mỗi bản ghi đầu vào được đọc, gawk chia tách bản ghi thành các trường , sử dụng giá trị của biến FS làm dấu tách trường. Nếu FS là một ký tự đơn, các trường được phân tách bằng ký tự đó. Nếu FS là chuỗi rỗng, thì mỗi ký tự riêng lẻ sẽ trở thành một trường riêng biệt. Nếu không, FS được mong đợi là một biểu thức chính quy đầy đủ. Trong trường hợp đặc biệt FS là một không gian đơn, các trường được phân tách bằng các khoảng trắng và / hoặc các tab và / hoặc các dòng mới. (Nhưng xem phần thảo luận của --posix , bên dưới). LƯU Ý: Giá trị của IGNORECASE (xem bên dưới) cũng ảnh hưởng đến cách các trường được phân tách khi FS là một biểu thức chính quy và cách các bản ghi được tách ra khi RS là một biểu thức chính quy.

Nếu biến FIELDWIDTHS được đặt thành một danh sách các số được phân tách bằng dấu cách, mỗi trường được mong đợi có chiều rộng cố định và gawk chia nhỏ bản ghi bằng cách sử dụng độ rộng được chỉ định. Giá trị của FS bị bỏ qua. Việc gán một giá trị mới cho FS sẽ ghi đè việc sử dụng FIELDWIDTHS và khôi phục hành vi mặc định.

Mỗi trường trong bản ghi đầu vào có thể được tham chiếu bởi vị trí của nó, $ 1 , $ 2 , v.v. $ 0 là toàn bộ hồ sơ. Các trường không cần tham chiếu bởi hằng số:

n = 5
in $ n

in trường thứ năm trong bản ghi đầu vào.

Biến NF được đặt thành tổng số trường trong bản ghi đầu vào.

Tham chiếu đến các trường không tồn tại (tức là các trường sau $ NF ) tạo ra chuỗi rỗng. Tuy nhiên, gán cho một trường không tồn tại (ví dụ, $ (NF + 2) = 5 ) tăng giá trị của NF , tạo ra bất kỳ trường can thiệp nào bằng chuỗi rỗng 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ị 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 cho các giá trị của các trường vượt quá giá trị mới bị mất 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ị OFS .

Việc gán một giá trị cho một trường hiện có sẽ làm cho toàn bộ bản ghi được xây dựng lại khi $ 0 được tham chiếu. Tương tự, gán giá trị cho $ 0 làm cho bản ghi được resplit, tạo ra các giá trị mới cho các trường.

Biến tích hợp

Các biến tích hợp của Gawk là:

ARGC

Số đối số dòng lệnh (không bao gồm các tùy chọn cho gawk hoặc nguồn chương trình).

ARGIND

Chỉ mục trong ARGV của tệp hiện đang được xử lý.

ARGV

Mảng các đối số dòng lệnh. Mảng được lập chỉ mục từ 0 đến ARGC - 1. Tự động thay đổi nội dung của ARGV có thể kiểm soát các tệp được sử dụng cho dữ liệu.

BINMODE

Trên các hệ thống không thuộc POSIX, chỉ định sử dụng chế độ `` nhị phân '' cho tất cả các tệp I / O. Các giá trị số 1, 2 hoặc 3, xác định rằng các tệp đầu vào, tệp đầu ra hoặc tất cả các tệp tương ứng, nên sử dụng nhị phân I / O. Các giá trị chuỗi của "r" hoặc "w" chỉ định rằng tệp đầu vào hoặc tệp đầu ra tương ứng, nên sử dụng nhị phân I / O. Giá trị chuỗi của "rw" hoặc "wr" chỉ định rằng tất cả các tệp phải sử dụng nhị phân I / O. Bất kỳ giá trị chuỗi nào khác được coi là "rw" , nhưng tạo ra một thông báo cảnh báo.

CONVFMT

Định dạng chuyển đổi cho số, "% .6g" , theo mặc định.

ENVIRON

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 đó (ví dụ: ENVIRON ["HOME"] có thể là / home / arnold ). Thay đổi mảng này không ảnh hưởng đến môi trường được thấy bởi các chương trình mà gawk sinh ra thông qua chuyển hướng hoặc hàm system () .

ERRNO

Nếu lỗi hệ thống xảy ra hoặc đang thực hiện chuyển hướng cho getline , trong khi đọc cho getline , hoặc trong khi đóng () , thì ERRNO sẽ chứa một chuỗi mô tả lỗi. Giá trị có thể được dịch sang ngôn ngữ không phải tiếng Anh.

FIELDWIDTHS

Danh sách các trường độ rộng được phân cách bằng dấu cách 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.

FILENAME

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, giá trị của FILENAME là `` - ''. Tuy nhiên, FILENAME không được xác định bên trong khối BEGIN (trừ khi được đặt bởi getline ).

FNR

Số bản ghi đầu vào trong tệp đầu vào hiện tại.

FS

Dấu tách trường đầu vào, một khoảng trắng theo mặc định. Xem Fields , ở trên.

BỎ QUA TRƯỜNG HỢP

Kiểm soát độ nhạy trường hợp của tất cả các hoạt động biểu thức và chuỗi thông thường. Nếu IGNORECASE có giá trị khác 0, sau đó so sánh chuỗi và khớp mẫu trong quy tắc, phân tách trường bằng FS , bản ghi tách với RS , đối sánh cụm từ thông dụng với ~! ~ , Và gensub () , gsub () , chỉ mục () , các hàm dựng sẵn match () , split ()sub () được bỏ qua tất cả các trường hợp bỏ qua khi thực hiện các hoạt động biểu thức chính quy. LƯU Ý: Mảng subscripting không bị ảnh hưởng, cũng không phải là hàm asort () .

Do đó, nếu IGNORECASE không bằng 0, / aB / khớp với tất cả các chuỗi "ab" , "aB" , "Ab""AB" . Như với tất cả các biến AWK, giá trị ban đầu của IGNORECASE bằng không, vì vậy tất cả các biểu thức chính quy và các phép toán chuỗi thường phân biệt chữ hoa chữ thường. Trong Unix, bộ ký tự ISO 8859-1 đầy đủ Latin-1 được sử dụng khi bỏ qua trường hợp.

LINT

Cung cấp điều khiển động của tùy chọn --lint từ bên trong chương trình AWK. Khi đúng, cảnh báo chim ưng lint in. Khi sai, nó không. Khi gán giá trị chuỗi "gây tử vong" , cảnh báo lint trở thành lỗi nghiêm trọng, giống như --lint = fatal . Bất kỳ giá trị thực nào khác chỉ in cảnh báo.

NF

Số trường trong bản ghi đầu vào hiện tại.

NR

Tổng số bản ghi đầu vào được nhìn thấy cho đến nay.

OFMT

Định dạng đầu ra cho số, "% .6g" , theo mặc định.

OFS

Dấu tách trường đầu ra, một khoảng trắng theo mặc định.

ORS

Dấu phân tách bản ghi đầu ra, theo mặc định là một dòng mới.

PROCINFO

Các phần tử của mảng này cung cấp quyền truy cập thông tin về chương trình AWK đang chạy. Trên một số hệ thống, có thể có các phần tử trong mảng, "group1" đến "nhóm n " đối với một số n , đó là số lượng các nhóm bổ sung mà quy trình có. Sử dụng toán tử in để kiểm tra các phần tử này. Các yếu tố sau được đảm bảo khả dụng:

PROCINFO ["egid"]

giá trị của cuộc gọi hệ thống getegid (2).

PROCINFO ["euid"]

giá trị của cuộc gọi hệ thống geteuid (2).

PROCINFO ["FS"]

"FS" nếu việc tách trường bằng FS có hiệu lực hoặc "FIELDWIDTHS" nếu việc tách trường bằng FIELDWIDTHS có hiệu lực.

PROCINFO ["gid"]

giá trị của cuộc gọi hệ thống getgid (2).

PROCINFO ["pgrpid"]

ID nhóm tiến trình của quy trình hiện tại.

PROCINFO ["pid"]

ID tiến trình của quy trình hiện tại.

PROCINFO ["ppid"]

ID tiến trình cha của quá trình hiện tại.

PROCINFO ["uid"]

giá trị của cuộc gọi hệ thống getuid (2).

RS

Dấu tách bản ghi đầu vào, theo mặc định là một dòng mới.

RT

Người kết thúc bản ghi. Gawk đặ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 .

RSTART

Chỉ số của ký tự đầu tiên khớp với đối sánh () ; 0 nếu không khớp. (Điều này ngụ ý rằng các chỉ số ký tự bắt đầu từ một.)

RLENGTH

Độ dài của chuỗi phù hợp bởi match () ; -1 nếu không có trận đấu.

SUBSEP

Ký tự được sử dụng để phân tách nhiều bảng con trong phần tử mảng, theo mặc định "\ 034" .

TEXTDOMAIN

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

Mảng được chỉ số với một biểu thức giữa dấu ngoặc vuông ( [] ). Nếu biểu thức là một danh sách biểu thức ( expr , expr ...) thì chỉ số mảng là một chuỗi gồm có sự nối của giá trị (chuỗi) của mỗi biểu thức, được phân cá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 nhân kích thước. Ví dụ:

i = "A"; j = "B"; k = "C"
x [i, j, k] = "Xin chào, thế giới \ 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, tức là được lập chỉ mục bởi các giá trị chuỗi.

Toán tử đặc biệt trong có thể được sử dụng trong câu lệnh if hoặc while để xem một mảng có một chỉ mục bao gồm một giá trị cụ thể hay không.

nếu mảng in (val in array) [val]

Nếu mảng có nhiều subscript, sử dụng (i, j) trong mảng .

Cấu trúc trong 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.

Một phần tử có thể bị xóa khỏi một mảng bằng cách sử dụng câu lệnh delete . Lệnh xóa 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ó một chỉ số.

Nhập và chuyển đổi biến

Các biến và các trường có thể là các số (hoặc các dấu phẩy động), hoặc cả hai. Giá trị của một biến được diễn giải phụ thuộc vào ngữ cảnh của nó như thế nào. 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ố, thêm 0 vào nó; buộc nó được coi như một chuỗi, nối nó với chuỗi rỗng.

Khi một chuỗi phải được chuyển đổi thành một số, 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 như một 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 là dấu phẩy động, các giá trị tích phân luôn được chuyển đổi thành số nguyên. Như vậy, được

CONVFMT = "% 2.2f" a = 12 b = a ""

biến b có giá trị chuỗi là "12" và không phải là "12.00" .

Gawk thực hiện các so sánh như sau: Nếu hai biến số 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ì các so sánh cũng được thực hiện bằng số. Nếu không, giá trị số được chuyển thành chuỗi và so sánh chuỗi được thực hiện. Hai chuỗi được so sánh, tất nhiên, là chuỗi. Lưu ý rằng tiêu chuẩn POSIX áp dụng khái niệm `` chuỗi số '' ở khắp mọi nơi, ngay cả với các hằng số chuỗi. Tuy nhiên, điều này rõ ràng là không chính xác, và chim ưng không làm điều này. (May mắn thay, điều này được sửa trong phiên bản tiếp theo của tiêu chuẩn.)

Lưu ý rằng hằng số chuỗi, chẳng hạn như "57" , không phải là chuỗi số, chúng là các hằng số chuỗi. Ý tưởng của chuỗi ký tự '' chỉ áp dụng cho các trường, đầu vào đường truyền, phần tử FILENAME , ARGV , phần tử ENVIRON và các phần tử của một mảng được tạo bởi split () là các chuỗi số. Ý tưởng cơ bản là đầu vào của người dùng và chỉ người dùng nhập vào, trông có vẻ số, nên được xử lý theo cách đó.

Các biến chưa được khởi tạo có giá trị số 0 và giá trị chuỗi "" (chuỗi rỗng hoặc trống).

Hằng số thập lục phân và thập lục phân

Bắt đầu với phiên bản 3.1 của gawk, bạn có thể sử dụng các tham số bát phân và kiểu thập lục phân kiểu C trong mã nguồn chương trình AWK của bạn. 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 17 thập phân.

Chuỗi hằng số

Hằng số chuỗi trong AWK là chuỗi các ký tự được đặt giữa dấu ngoặc kép ( " ). Trong chuỗi, các chuỗi thoát nhất định được nhận dạng, như trong C. Đây là:

\\

Một dấu gạch chéo ngược chữ.

\ a

Ký tự `` alert ''; thường là ký tự BEL ASCII.

\ b

backspace.

\ f

thức ăn dạng.

\ n

dòng mới.

\ r

vận chuyển trở lại.

\ t

Tab ngang.

\ v

tab dọc.

\ x chữ số hex

Ký tự được biểu diễn bằng chuỗi các chữ số thập lục phân sau dấu \ x . Giống như trong ANSIC, tất cả các chữ số thập lục phân sau đây được coi là một phần của chuỗi thoát. (Tính năng này nên cho chúng tôi biết một vài điều về thiết kế ngôn ngữ theo ủy ban.) Ví dụ: "\ x1B" là ký tự ASCIIESC (escape).

\ ddd

Ký tự được biểu diễn bằng chuỗi chữ số bát phân 1, 2 hoặc 3 chữ số. Ví dụ, "\ 033" là ký tự ESC (escape) ASCII.

\ c

Ký tự chữ c .

Các chuỗi thoát 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 các ký tự khoảng trống).

Trong chế độ tương thích, các ký tự đại diện bởi các chuỗi thoát bát phân và thập lục phân được xử lý theo nghĩa đen khi được sử dụng trong các hằng số biểu thức chính quy. Do đó, / a \ 52b / tương đương với / a \ * b / .

Các mẫu và hành động

AWK là ngôn ngữ hướng dòng. Các mô hình đến trước, và sau đó là hành động. Các câu lệnh hành động được kèm theo trong {} . Hoặc là mẫu có thể bị thiếu hoặc hành động có thể bị thiếu, nhưng, tất nhiên, không phải cả hai. Nếu mẫu bị thiếu, hành động được thực hiện cho mỗi bản ghi đầu vào duy nhất. Hành động bị thiếu tương đương với

{print}

in toàn bộ bản ghi.

Các chú thích 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 tuyên bố 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 các dòng kết thúc bằng một ``, '', { , ? , : , && , hoặc || . Các dòng kết thúc bằng cách nào đó hoặc người khác cũng có câu lệnh tự động tiếp tục trên dòng sau. 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 bằng ', trong trường hợp đó dòng mới sẽ bị bỏ qua.

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 một ``; ''. Điều này áp dụng cho cả hai câu lệnh trong phần hành động của một cặp hành động mẫu (trường hợp thông thường) và chính các câu lệnh mẫu-action.

Mẫu

Mẫu AWK có thể là một trong các loại sau:

BEGIN END / biểu thức chính quy / mẫu biểu thức quan hệ & mẫu hình mẫu || mẫu hoa văn ? pattern : pattern ( pattern ) ! mẫu pattern1 , pattern2

BEGINEND 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 khối BEGIN . Chúng được thực hiện trước khi bất kỳ đầu vào nào được đọc. Tương tự, tất cả các khối END được hợp nhất và được thực hiện khi tất cả đầu vào bị cạn kiệt (hoặc khi một lệnh thoát được thực thi). Không thể kết hợp các mẫu BEGINEND với các mẫu khác trong các biểu thức mẫu. Các mẫu BEGINEND không thể thiếu các phần hành động.

Đối với / biểu thức / mẫu thông thường , câu lệnh liên quan được thực thi cho mỗi 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 cũng giống như các biểu thức trong egrep (1), và được tóm tắt dưới đây.

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 cụm từ thông dụng nhất định không.

The && , || , và ! các toán tử logic và AND, logic OR và NOT hợp lý, tương ứng, 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á.

Toán tử ?: giống như toán tử giống nhau trong C. Nếu mẫu đầu tiên là đúng thì mẫu được sử dụng để thử nghiệm là mẫu thứ hai, nếu không thì đó là mẫu thứ ba. Chỉ một trong các mẫu thứ hai và thứ ba được đánh giá.

Dạng pattern1 , pattern2 của một biểu thức được gọi là một mẫu phạm vi . Nó khớp với tất cả các bản ghi đầu vào bắt đầu với bản ghi khớp với mẫu1 và tiếp tục cho đến khi bản ghi khớp với mẫu2 , bao gồm. Nó không kết hợp với bất kỳ loại biểu thức mô hình nào khác.

Cụm từ thông dụng

Biểu thức chính quy là loại mở rộng được tìm thấy trong egrep . Chúng bao gồm các ký tự như sau:

c

phù hợp với không metacharacter c .

\ c

khớp với ký tự chữ c .

.

khớp với bất kỳ ký tự nào kể cả dòng mới.

^

khớp với đầu chuỗi.

$

khớp với phần cuối của chuỗi.

[ abc ... ]

danh sách ký tự, khớp với bất kỳ ký tự nào abc ....

[^ abc ... ]

danh sách ký tự phủ định, khớp với bất kỳ ký tự nào ngoại trừ abc ....

r1 | r2

luân phiên: khớp với r1 hoặc r2 .

r1r2

nối: khớp với r1r2 .

r +

phù hợp với một hoặc nhiều r 's.

r *

phù hợp với số không hoặc nhiều r .

r ?

phù hợp với số không hoặc một r 's.

( r )

nhóm: trận đấu r .

r { n }

r { n ,}

r { n , m } Một hoặc hai con số bên trong dấu ngoặc biểu thị một biểu thức khoảng thời gian . Nếu có một số trong dấu ngoặc, biểu thức chính quy trước r được lặp lại n lần. Nếu có hai số được phân tách bằng dấu phẩy, r được lặp lại từ n đến m lần. Nếu có một số theo sau dấu phẩy, thì r được lặp lại ít nhất n lần.

Biểu thức khoảng thời gian chỉ khả dụng nếu --posix hoặc --re-interval được chỉ định trên dòng lệnh.

\ y

khớp với chuỗi trống ở đầu hoặc cuối của từ.

\ B

khớp với chuỗi trống trong một từ.

\ <

khớp với chuỗi trống ở đầu từ.

\>

khớp với chuỗi trống ở cuối từ.

\ w

khớp với bất kỳ ký tự cấu thành từ nào (chữ cái, chữ số hoặc dấu gạch dưới).

\ W

khớp với bất kỳ ký tự nào không phải là thành phần từ.

\ `

khớp với chuỗi rỗng ở đầu bộ đệm (chuỗi).

\ '

khớp với chuỗi trống ở cuối bộ đệm.

Các chuỗi thoát có giá trị trong các hằng số chuỗi (xem bên dưới) cũng hợp lệ trong các biểu thức chính quy.

Các lớp nhân vật là một tính năng mới được giới thiệu trong tiêu chuẩn POSIX. Lớp nhân vật là một ký hiệu đặc biệt để mô tả danh sách các ký tự có thuộc tính cụ thể, nhưng ở đó các ký tự thực tế có thể khác nhau giữa các quốc gia và / hoặc từ ký tự được đặt thành bộ ký tự. Ví dụ, khái niệm về ký tự chữ cái khác nhau ở Mỹ và ở Pháp là gì.

Một lớp nhân vật chỉ hợp lệ trong một biểu thức chính quy bên trong dấu ngoặc đơn của một danh sách ký tự. Các lớp ký tự bao gồm [: , một từ khóa biểu thị lớp, và :] . Các lớp ký tự được xác định theo tiêu chuẩn POSIX là:

[: alnum:]

Ký tự chữ và số.

[: alpha:]

Ký tự chữ cái.

[:chỗ trống:]

Không gian hoặc ký tự tab.

[: cntrl:]

Kiểm soát các ký tự.

[: chữ số:]

Các ký tự số.

[: đồ thị:]

Các ký tự có thể in và hiển thị. (Một không gian có thể in được, nhưng không hiển thị được, trong khi cả a là cả hai.)

[:thấp hơn:]

Ký tự chữ cái viết thường.

[:in:]

Các ký tự có thể in (các ký tự không phải là ký tự điều khiển).

[: dấu chấm câu:]

Ký tự dấu câu (ký tự không phải là chữ cái, chữ số, ký tự điều khiển hoặc ký tự khoảng trắng).

[:không gian:]

Ký tự khoảng trắng (chẳng hạn như dấu cách, tab và formfeed, để đặt tên một vài).

[:phía trên:]

Chữ hoa chữ thường.

[: xdigit:]

Các ký tự là các chữ số thập lục phân.

Ví dụ, trước tiêu chuẩn POSIX, để khớp các ký tự chữ và số, bạn sẽ phải viết / [A-Za-z0-9] / . Nếu bộ ký tự của bạn có các ký tự chữ cái khác trong nó, điều này sẽ không khớp với chúng và nếu bộ ký tự của bạn được đối chiếu khác với ASCII, điều này có thể không khớp với các ký tự chữ và số ASCII. Với các lớp nhân vật POSIX, bạn có thể viết / [[: alnum:]] / , và điều này khớp với các ký tự chữ cái và số trong bộ ký tự của bạn.

Hai chuỗi đặc biệt bổ sung có thể xuất hiện trong danh sách ký tự. Các giá trị này áp dụng cho các bộ ký tự không phải ASCII, có thể có các ký hiệu đơn (được gọi là các phần tử đối chiếu ) được biểu thị bằng nhiều ký tự, cũng như một số ký tự tương đương với mục đích đối chiếu hoặc sắp xếp. (Ví dụ, bằng tiếng Pháp, một chữ cái `` e '' và một dấu e` có dấu tương đương.)

Biểu tượng đối chiếu

Biểu tượng đối chiếu là phần tử đối chiếu nhiều ký tự được đính kèm trong [..] . Ví dụ: nếu ch là phần tử đối chiếu thì [[.ch.]] Là cụm từ thông dụng khớp với phần tử đối chiếu này, trong khi [ch] là cụm từ thông dụng khớp với c hoặc h .

Các lớp tương đương

Một lớp tương đương là một tên miền địa phương cụ thể cho một danh sách các ký tự tương đương. Tên được đặt trong [==] . Ví dụ, tên e có thể được sử dụng để đại diện cho tất cả `` e, '' `` e ',' 'và `` e`.' 'Trong trường hợp này, [[= e =]] là một biểu thức chính quy khớp với bất kỳ e , e ' hoặc e` nào .

Những tính năng này rất có giá trị trong các ngôn ngữ không nói tiếng Anh. Các hàm thư viện mà gawk sử dụng để đối sánh cụm từ thông dụng hiện chỉ nhận ra các lớp ký tự POSIX; họ không nhận ra các biểu tượng đối chiếu hoặc các lớp tương đương.

Các toán tử \ y , \ B , \ < , \> , \ w , \ W , \ `\ ' cụ thể đối với chim ưng ; chúng là các phần mở rộng dựa trên các cơ sở trong các thư viện biểu thức chính quy GNU.

Các tùy chọn dòng lệnh khác nhau kiểm soát cách gawk diễn giải các ký tự trong các biểu thức chính quy.

Không có lựa chọn

Trong trường hợp mặc định, gawk cung cấp tất cả các cơ sở của biểu thức chính quy POSIX và toán tử biểu thức chính quyGNU được mô tả ở trên. Tuy nhiên, biểu thức khoảng thời gian không được hỗ trợ.

--posix

Chỉ các biểu thức chính quy POSIX mới được hỗ trợ, các toán tử GNU không phải là đặc biệt. (Ví dụ: \ w khớp với chữ w ). Biểu thức khoảng thời gian được cho phép.

--truyên thông

Các biểu thức chính quy Unix thông thường được kết hợp. Các toán tử GNU không đặc biệt, các biểu thức khoảng thời gian không có sẵn, và không phải là các lớp ký tự POSIX ( [[: alnum:]] và vv). Các ký tự được mô tả bởi các chuỗi thoát bát phân và thập lục phân được xử lý theo nghĩa đen, ngay cả khi chúng đại diện cho các siêu ký tự biểu thức chính quy.

--re-interval

Cho phép các biểu thức khoảng thời gian trong các biểu thức chính quy, ngay cả khi - đã được cung cấp.

Hành động

Các câu lệnh hành động được đặt trong dấu ngoặc ôm, {} . Các câu lệnh hành động bao gồm các câu lệnh thông thường, có điều kiện và lặp được tìm thấy trong hầu hết các ngôn ngữ. Các toán tử, các câu lệnh điều khiển và các câu lệnh đầu vào / đầu ra có sẵn được tạo khuôn mẫu sau các câu lệnh trong C.

Nhà khai thác

Các toán tử trong AWK, theo thứ tự ưu tiên giảm, là

( ... )

Nhóm

$

Tham chiếu trường.

++ -

Tăng và giảm, cả tiền tố và postfix.

^

Exponentiation ( ** cũng có thể được sử dụng, và ** = cho toán tử gán).

+ -!

Cộng đơn, trừ đơn và âm.

* /%

Nhân, chia và mô đun.

+ -

Cộng và trừ.

không gian

Chuỗi nối.

<>

<=> =

! = == Các toán tử quan hệ thường xuyên.

~! ~

Đối sánh cụm từ thông dụng, đối sánh phủ định. LƯU Ý: Không sử dụng cụm từ thông dụng liên tục ( / foo / ) ở phía bên tay trái của ~ hoặc ! ~ . Chỉ sử dụng một ở bên tay phải. Biểu thức / foo / ~ exp có cùng ý nghĩa với (($ 0 ~ / foo /) ~ exp ) . Điều này thường không phải là những gì đã được dự định.

trong

Thành viên mảng.

&&

Logic và.

||

Hợp lý HOẶC.

?:

Biểu thức điều kiện C. Điều này có dạng expr1 ? expr2 : expr3 . Nếu expr1 là true, giá trị của biểu thức là expr2 , nếu không nó là expr3 . Chỉ có một trong số expr2expr3 được đánh giá.

= + = - =

* = / =% = ^ = Bài tập. Cả phép gán tuyệt đối ( var = value ) và toán tử gán (các dạng khác) đều được hỗ trợ.

Câu lệnh kiểm soát

Các câu lệnh kiểm soát như sau:

if ( condition ) statement [ else statement ] trong khi câu lệnh ( điều kiện ) làm câu lệnh while ( condition ) cho câu lệnh ( expr1 ; expr2 ; expr3 ) cho câu lệnh break ( var in array ) tiếp tục xóa mảng [ index ] delete array exit [ expression ] { statement }

Báo cáo I / O

Các báo cáo đầu vào / đầu ra như sau:

đóng ( tệp [ , cách ]]

Đóng tệp, đường ống hoặc đồng xử lý. Tùy chọn chỉ nên được sử dụng khi đóng một đầu của đường ống hai chiều cho một quá trình đồng. Nó phải là một giá trị chuỗi, hoặc là "đến" hoặc "từ" .

theo hàng

Đặt $ 0 từ bản ghi đầu vào tiếp theo; đặt NF , NR , FNR .

getline < file

Đặt $ 0 từ bản ghi tiếp theo của tệp ; đặt NF .

getline var

Đặt var từ bản ghi đầu vào tiếp theo; đặt NR , FNR .

getline var < file

Đặt var từ bản ghi tiếp theo của tệp .

lệnh | getline [ var ]

Chạy lệnh piping đầu ra hoặc vào $ 0 hoặc var , như trên.

lệnh | & getline [ var ]

Chạy lệnh như một quá trình đồng ống dẫn đầu ra hoặc vào $ 0 hoặc var , như trên. Đồng quy trình là một phần mở rộng gawk .

kế tiếp

Ngừng xử lý bản ghi đầu vào hiện tại. Bản ghi đầu vào tiếp theo được đọc và xử lý bắt đầu lại với mẫu đầu tiên trong chương trình AWK. Nếu kết thúc dữ liệu đầu vào đạt được, khối END (s), nếu có, được thực thi.

nextfile

Ngừng xử lý tệp đầu vào hiện tại. Các bản ghi đầu vào tiếp theo đọc đến từ các tập tin đầu vào tiếp theo. FILENAMEARGIND được cập nhật, FNR được đặt lại thành 1 và quá trình xử lý bắt đầu lại với mẫu đầu tiên trong chương trình AWK. Nếu kết thúc dữ liệu đầu vào đạt được, khối END (s), nếu có, được thực thi.

in

In bản ghi hiện tại. Bản ghi đầu ra được kết thúc bằng giá trị của biến ORS .

in danh sách expr

In biểu thức. Mỗi biểu thức được phân cách bằng giá trị của biến OFS . Bản ghi đầu ra được kết thúc bằng giá trị của biến ORS .

print expr-list > tệp

In các biểu thức trên tập tin . Mỗi biểu thức được phân cách bằng giá trị của biến OFS . Bản ghi đầu ra được kết thúc bằng giá trị của biến ORS .

printf fmt, expr-list

Định dạng và in.

printf fmt, expr-list > tệp

Định dạng và in trên tệp .

hệ thống ( cmd-line )

Thực thi lệnh cmd-line và trả về trạng thái thoát. (Điều này có thể không có sẵn trên các hệ thống không POSIX.)

fflush ( [ tệp ] )

Làm sạch mọi bộ đệm liên quan đến tệp đầu ra mở hoặc tệp đường ống. Nếu tệp bị thiếu, khi đó đầu ra tiêu chuẩn sẽ bị xóa. Nếu tệp là chuỗi rỗng, thì tất cả các tệp và đường dẫn đầu ra mở đều có bộ đệm của chúng bị xóa.

Các chuyển hướng đầu ra bổ sung được cho phép inprintf .

in ... >> tệp

nối đầu ra vào tệp .

in ... | chỉ huy

viết trên một đường ống.

in ... | & lệnh

gửi dữ liệu đến một quá trình đồng.

Lệnh getline trả về 0 ở cuối tập tin và -1 trên một lỗi. Khi có lỗi, ERRNO chứa một chuỗi mô tả vấn đề.

LƯU Ý: Nếu sử dụng một đường ống hoặc đồng xử lý để getline , hoặc từ in ấn hoặc printf trong vòng một, bạn phải sử dụng close () để tạo ra các trường hợp mới của lệnh. AWK không tự động đóng các đường ống hoặc các quá trình đồng thời khi chúng trả về EOF.

Tuyên bố printf

Các phiên bản AWK của lệnh printfsprintf () (xem bên dưới) chấp nhận các định dạng đặc tả chuyển đổi sau:

% c

Một ký tự ASCII. Nếu đối số được sử dụng cho % c là số, nó được coi là ký tự và được in. Nếu không, đối số được giả định là một chuỗi và ký tự đầu tiên duy nhất của chuỗi đó được in.

% d , % i

Một số thập phân (phần nguyên).

% e,% E

Một số dấu chấm động của biểu mẫu [-] d.dddddde [+ -] đ . Định dạng % E sử dụng E thay cho e .

% f

Một số dấu chấm động của biểu mẫu [-] ddd.dddddd .

% g,% G

Sử dụng % e hoặc % f chuyển đổi, tùy theo cái nào ngắn hơn, với các số 0 không đáng kể bị chặn. Định dạng % G sử dụng % E thay vì % e .

% o

Số bát phân không dấu (cũng là số nguyên).

% u Một số thập phân không dấu (một lần nữa, một số nguyên).

%S

Một chuỗi ký tự.

% x,% X

Số thập lục phân chưa dấu (số nguyên). Định dạng % X sử dụng ABCDEF thay vì abcdef .

%%

Một ký tự đơn; không có đối số nào được chuyển đổi.

Tùy chọn, các tham số bổ sung có thể nằm giữa % và ký tự điều khiển:

đếm $

Sử dụng đối số thứ số đếm tại thời điểm này trong định dạng. Điều này được gọi là một specifier vị trí và được dự định chủ yếu để sử dụng trong các phiên bản dịch của chuỗi định dạng, không phải trong văn bản gốc của một chương trình AWK. Nó là một phần mở rộng gawk .

- -

Biểu thức phải được căn trái trong trường của nó.

không gian

Đối với chuyển đổi số, tiền tố giá trị dương với khoảng trắng và giá trị âm với dấu trừ.

+

Dấu cộng, được sử dụng trước công cụ sửa đổi độ rộng (xem bên dưới), cho biết luôn cung cấp dấu hiệu cho chuyển đổi số, ngay cả khi dữ liệu được định dạng là dương. Dấu + ghi đè công cụ sửa đổi không gian.

#

Sử dụng một `` dạng thay thế '' cho các chữ cái điều khiển nhất định. Đối với % o , cung cấp số 0 đứng đầu. Đối với % x% X , cung cấp 0x hoặc 0X hàng đầu cho kết quả không đồng bộ. Đối với % e , % E% f , kết quả luôn chứa dấu thập phân. Đối với % g% G , các số không theo sau sẽ không bị xóa khỏi kết quả.

0

Hàng đầu 0 (0) hoạt động như một lá cờ, cho biết đầu ra phải được đệm bằng số không thay vì dấu cách. Điều này áp dụng ngay cả đối với các định dạng đầu ra không phải là số. Cờ này chỉ có hiệu lực khi chiều rộng trường rộng hơn giá trị được in.

chiều rộng

Trường phải được đệm thành chiều rộng này. Các lĩnh vực thường được đệm với không gian. Nếu cờ 0 đã được sử dụng, nó được đệm bằng số không.

. trước

Một số chỉ định độ chính xác để sử dụng khi in. Đối với các định dạng % e , % E% f , điều này chỉ định số chữ số bạn muốn in ở bên phải dấu thập phân. Đối với các định dạng % g% G , nó chỉ định số chữ số có nghĩa tối đa. Đối với các định dạng % d , % o , % i , % u , % x% X , nó chỉ định số chữ số tối thiểu cần in. Đối với % s , nó chỉ định số ký tự tối đa từ chuỗi cần được in.

Chiều rộng động và khả năng trước của các thường trình ANSI C printf () được hỗ trợ. A * thay cho độ rộng hoặc thông số kỹ thuật trước khiến cho các giá trị của chúng được lấy từ danh sách đối số tới printf hoặc sprintf () . Để sử dụng trình chỉ định vị trí có độ rộng hoặc độ chính xác động, hãy cung cấp số tiền $ sau dấu * trong chuỗi định dạng. Ví dụ: "% 3 $ * 2 $. * 1 $ s" .

Tên tệp đặc biệt

Khi thực hiện chuyển hướng I / O từ một trong hai bản in hoặc printf vào một tập tin, hoặc thông qua getline từ một tập tin, gawk nhận ra một số tên tập tin đặc biệt trong nội bộ. Những tên tập tin này cho phép truy cập để mở các mô tả tập tin được thừa kế từ quá trình cha mẹ của gawk (thường là shell). Những tên tệp này cũng có thể được sử dụng trên dòng lệnh để đặt tên tệp dữ liệu. Các tên tập tin là:

/ dev / stdin

Đầu vào tiêu chuẩn.

/ dev / stdout

Đầu ra tiêu chuẩn.

/ dev / stderr

Đầu ra lỗi tiêu chuẩn.

/ dev / fd / n

Tệp được liên kết với bộ mô tả tệp mở n .

Đây là những đặc biệt hữu ích cho các thông báo lỗi. Ví dụ:

in "Bạn đã thổi nó!" > "/ dev / stderr"

trong khi bạn sẽ phải sử dụng

in "Bạn đã thổi nó!" | "mèo 1> & 2"

Các tên tập tin đặc biệt sau đây có thể được sử dụng với toán tử | & co-process để tạo kết nối mạng TCP / IP.

/ inet / tcp / lport / rhost / rport

Tệp cho kết nối TCP / IP trên cổng cục bộ lport đến máy chủ lưu trữ 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.

/ inet / udp / lport / rhost / rport

Tương tự, nhưng sử dụng UDP / IP thay vì TCP / IP.

/ inet / raw / lport / rhost / rport

Để dành mai sau dùng.

Các tên tập tin đặc biệt khác cung cấp quyền truy cập thông tin về quy trình chạy diều . Những tên tập tin này đã lỗi thời. Sử dụng mảng PROCINFO để lấy thông tin mà họ cung cấp. Các tên tập tin là:

/ dev / pid

Đọc tệp này trả về ID tiến trình của quy trình hiện tại, theo số thập phân, được kết thúc bằng một dòng mới.

/ dev / ppid

Việc đọc tệp này trả về ID tiến trình cha của quy trình hiện tại, theo số thập phân, được kết thúc bằng một dòng mới.

/ dev / pgrpid

Việc đọc tệp này trả về ID nhóm tiến trình của quy trình hiện tại, theo số thập phân, được kết thúc bằng một dòng mới.

/ dev / người dùng

Việc đọc tệp này sẽ trả về một bản ghi được chấm dứt bằng một dòng mới. Các trường được phân tách bằng dấu cách. $ 1 là giá trị của cuộc gọi hệ thống getuid (2), $ 2 là giá trị của cuộc gọi hệ thống geteuid (2), $ 3 là giá trị của cuộc gọi hệ thống getgid (2) và $ 4 là giá trị của getegid (2) gọi hệ thống. Nếu có bất kỳ trường bổ sung nào, chúng là các ID nhóm được trả về bởi nhóm getgroup (2). Nhiều nhóm có thể không được hỗ trợ trên tất cả các hệ thống.

Hàm số

AWK có các hàm số học tích hợp sau:

atan2 ( y , x )

Trả về arctangent của y / x theo radian.

cos ( expr )

Trả về cosin của expr , tính bằng radian.

exp ( expr )

Hàm mũ.

int ( expr )

Cắt ngắn thành số nguyên.

nhật ký ( expr )

Hàm logarit tự nhiên.

rand ()

Trả về một số ngẫu nhiên từ 0 đến 1.

tội lỗi ( expr )

Trả về sin của expr , tính bằng radian.

sqrt ( expr )

Hàm gốc vuông.

srand ( [ expr ] )

Sử dụng expr làm hạt giống mới cho trình tạo số ngẫu nhiên. Nếu không có expr được cung cấp, thời gian trong ngày được sử dụng. Giá trị trả về là hạt giống trước đó cho trình tạo số ngẫu nhiên.

Hàm chuỗi

Gawk có các hàm chuỗi dựng sẵn sau:

asort ( s [ , d ] )

Trả về số phần tử trong mảng nguồn s . Nội dung của s được sắp xếp bằng cách sử dụng các quy tắc bình thường của gawk để so sánh các giá trị, và các chỉ mục của các giá trị được sắp xếp của s được thay thế bằng 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, thì s được sao chép đầu tiên thành d , và sau đó d được sắp xếp, để lại các chỉ mục của mảng nguồn không thay đổi.

gensub ( r , s , h [ , t ] )

Tìm kiếm chuỗi mục tiêu t cho các kết quả phù hợ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ì thay thế tất cả các kết quả phù hợp của r bằng s . Nếu không, h là một số cho biết khớp nào của r để thay thế. Nếu t không được cung cấp, $ 0 được sử dụng thay thế. Trong các văn bản thay thế, 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 nhấn ngoặc của n . Trình tự \ 0 thể hiện toàn bộ văn bản phù hợp, cũng như ký tự & . Không giống như sub ()gsub () , chuỗi đã sửa đổi được trả về dưới dạng kết quả của hàm và chuỗi đích ban đầu không bị thay đổi.

gsub ( r , s [ , t ] )

Đối với mỗi chuỗi con phù hợp với biểu thức chính quy r trong chuỗi t , thay thế chuỗi s và trả về số lượng thay thế. Nếu t không được cung cấp, hãy sử dụng $ 0 . An & trong văn bản thay thế được thay thế bằng văn bản đã được khớp thực sự. Sử dụng \ & để có được một chữ & . (Điều này phải được đánh máy là "\\ &" ; xem GAWK: Lập trình AWK hiệu quả để thảo luận đầy đủ hơn về các quy tắc cho & s và các dấu gạch chéo ngược trong văn bản thay thế của sub () , gsub ()gensub () .)

chỉ mục ( s , t )

Trả về chỉ mục của chuỗi t trong chuỗi s , hoặc 0 nếu t không có mặt. (Điều này ngụ ý rằng các chỉ số ký tự bắt đầu từ một.)

độ dài ( [ s ] )

Trả về độ dài của chuỗi s hoặc độ dài $ 0 nếu s không được cung cấp.

đối sánh ( s , r [ , a ] )

Trả về vị trí trong s khi biểu thức chính quy r xuất hiện, hoặc 0 nếu r không có mặt, và đặt giá trị của RSTARTRLENGTH . Lưu ý rằng thứ tự đối số giống như đối với toán tử ~ : str ~ re . Nếu mảng a được cung cấp, a được xóa và sau đó các phần tử từ 1 đến n được lấp đầy với các phần của s khớp với biểu thức con được nhúng ngoặc đơn tương ứng trong r . Phần tử 0'th chứa một phần của s khớp với toàn bộ cụm từ thông dụng r .

chia ( s , a [ , r ] )

Chia chuỗi s thành mảng a trên biểu thức chính quy r và trả về số trường. Nếu r bị bỏ qua, FS được sử dụng thay thế. Mảng a được xóa đầu tiên. Tách các hành vi giống hệt với phân tách trường, được mô tả ở trên.

sprintf ( fmt , expr-list )

In danh sách expr theo fmt và trả về chuỗi kết quả.

strtonum ( str )

Kiểm tra str và trả về giá trị số của nó. Nếu str bắt đầu với một hàng đầu 0 , strtonum () giả định rằng str là một số bát phân. Nếu str bắt đầu với 0x hoặc 0X hàng đầu, strtonum () giả định rằng str là một số thập lục phân.

phụ ( r , s [ , t ] )

Giống như gsub () , nhưng chỉ thay thế chuỗi con phù hợp đầu tiên.

substr ( s , i [ , n ] )

Trả về tối đa n- ký tự con của chuỗi s bắt đầu từ i . Nếu n được bỏ qua, phần còn lại của s được sử dụng.

NULL

Trả về một bản sao của chuỗi str , với tất cả các ký tự chữ hoa trong str được dịch sang các đối tác chữ thường tương ứng của chúng. Ký tự không phải chữ cái được giữ nguyên.

toupper ( str )

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 các đối tác chữ hoa tương ứng của chúng. Ký tự không phải chữ cái được giữ nguyên.

Hàm thời gian

Vì một trong những ứng dụng chính của chương trình AWK là xử lý các tệp nhật ký có chứa thông tin về dấu thời gian, gawk cung cấp các chức năng sau đây để nhận tem thời gian và định dạng chúng.

mktime ( ngàypec )

Rurns datepec thành một dấu thời gian của cùng một hình thức như được trả về bởi systime () . Datepec là một chuỗi có dạng YYYY MM DD HH MM SS [DST] . Nội dung của chuỗi là sáu hoặc bảy số đại diện tương ứng cả năm kể cả thế kỷ, tháng từ 1 đến 12, ngày trong tháng từ 1 đến 31, giờ trong ngày từ 0 đến 23, phút từ 0 đến 59 và thứ hai từ 0 đến 60 và cờ tiết kiệm ánh sáng ban ngày tùy chọn. Các giá trị của các số này không cần nằm trong phạm vi được chỉ định; ví dụ, một giờ -1 có nghĩa là 1 giờ trước nửa đêm. Lịch Gregorian gốc-không được giả định, với năm 0 trước năm 1 và năm -1 trước năm 0. Thời gian được giả định là theo múi giờ địa phương. Nếu cờ tiết kiệm ánh sáng ban ngày là dương, thì thời gian được giả định là thời gian tiết kiệm ánh sáng ban ngày; nếu không, thời gian được giả định là thời gian tiêu chuẩn; và nếu âm (mặc định), mktime () cố gắng xác định xem thời gian tiết kiệm ánh sáng ban ngày có hiệu lực trong thời gian đã chỉ định hay không. Nếu datepec 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.

strftime ( [ định dạng [ , dấu thời gian ]] )

Định dạng dấu thời gian theo đặc điểm kỹ thuật ở định dạng. Dấu thời gian phải có dạng giố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 được sử dụng. Nếu định dạng bị thiếu, một định dạng mặc định tương đương với đầu ra của ngày (1) được sử dụng. Xem đặc tả cho hàm strftime () trong ANSI C cho các chuyển đổi định dạng được đảm bảo có sẵn. Một phiên bản tên miền công cộng của strftime (3) và một trang man cho nó đi kèm với gawk ; nếu phiên bản đó được sử dụng để xây dựng chim ưng , thì tất cả các chuyển đổi được mô tả trong trang người đàn ông đó đều có sẵn cho chim ưng.

systime ()

Trả về thời gian hiện tại trong ngày bằng số giây kể từ thời đại Epoch (1970-01-01 00:00:00 UTC trên các hệ thống POSIX).

Chức năng thao tác bit

Bắt đầu với phiên bản 3.1 của gawk , các chức năng thao tác bit sau đây có sẵn. Chúng hoạt động bằng cách chuyển đổi các giá trị dấu chấm động có độ chính xác gấp đôi thành số nguyên dài chưa ký , thực hiện thao tác, và sau đó chuyển đổi kết quả về điểm nổi. Các chức năng là:

và ( v1 , v2 )

Trả về bitwise AND của các giá trị được cung cấp bởi v1v2 .

compl ( val )

Trả về bitwise bổ sung của val .

lshift ( val , đếm )

Trả về giá trị của val , dịch chuyển sang trái bằng số bit.

hoặc ( v1 , v2 )

Trả về bitwise OR của các giá trị được cung cấp bởi v1v2 .

rshift ( val , đếm )

Trả về giá trị của val , dịch chuyển sang phải bằng số bit.

xor ( v1 , v2 )

Trả về giá trị XOR bitwise của các giá trị được cung cấp bởi v1v2 .

Chức năng quốc tế hóa

Bắt đầu với phiên bản 3.1 của gawk , các chức năng sau đây có thể được sử dụng từ bên trong chương trình AWK của bạn để dịch chuỗi tại thời gian chạy. Để biết chi tiết đầy đủ, hãy xem GAWK: Lập trình AWK hiệu quả .

bindtextdomain ( thư mục [ , tên miền ] )

Chỉ định thư mục nơi gawk tìm kiếm các tệp .mo , trong trường hợp chúng sẽ không hoặc không thể được đặt trong các vị trí `` chuẩn '' (ví dụ, trong khi thử nghiệm). Nó trả về thư mục trong đó miền bị `ràng buộc. ''

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ề ràng buộc hiện tại cho miền đã cho.

dcgettext ( chuỗi [ , tên miền [ , danh mục ]] )

Trả về bản dịch của chuỗi trong miền miền văn bản cho danh mục danh mục địa phương. 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"LC_MESSAGES" .

Nếu bạn cung cấp một giá trị cho danh mục , nó phải là một chuỗi bằng một trong các loại ngôn ngữ đã biết được mô tả trong GAWK: Lập trình AWK hiệu quả . Bạn cũng phải cung cấp một miền văn bản. Sử dụng TEXTDOMAIN nếu bạn muốn sử dụng tên miền hiện tại.

dcngettext (string1, string2 , number [ , domain [ , category ]] )

Trả về dạng số nhiều được sử dụng cho số bản dịch của chuỗi 1 và chuỗi 2 trong miền miền văn bản cho danh mục danh mục địa phương. 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"LC_MESSAGES" .

Nếu bạn cung cấp một giá trị cho danh mục , nó phải là một chuỗi bằng một trong các loại ngôn ngữ đã biết được mô tả trong GAWK: Lập trình AWK hiệu quả . Bạn cũng phải cung cấp một miền văn bản. Sử dụng TEXTDOMAIN nếu bạn muốn sử dụng tên miền hiện tại.

Hàm CHỨC NĂNG NGƯỜI DÙNG

Các hàm trong AWK được định nghĩa như sau:

tên hàm ( danh sách tham số ) { statements }

Các hàm được thực hiện khi chúng được gọi từ bên trong các biểu thức trong một trong hai mẫu hoặc hành động. Các tham số thực tế được cung cấp trong lời gọi hàm được sử dụng để khởi tạo các tham số chí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ị.

Vì các hàm ban đầu không phải là một phần của ngôn ngữ AWK, việc cung cấp cho các biến cục bộ khá là vụng về: Chúng được khai báo là 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 các khoảng trống thừa trong danh sách tham số. Ví dụ:

hàm f (p, q, a, b) # a và b là địa phương {...} / abc / {...; f (1, 2); ...}

Dấu ngoặc đơn bên trái trong một cuộc gọi hàm được yêu cầu để ngay lập tức theo tên hàm, mà không có bất kỳ khoảng trống trắng nào xen kẽ. Điều này là để tránh một sự mơ hồ cú pháp với toán tử nối. Hạn chế này không áp dụng cho các hàm dựng sẵn được liệt kê ở trên.

Các chức năng có thể gọi nhau và có thể đệ quy. Các tham số chức năng được sử dụng như các biến cục bộ được khởi tạo thành chuỗi rỗng và số không khi gọi hàm.

Sử dụng trả về expr để trả về một giá trị từ một hàm. Giá trị trả về là không 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 `` tắt '' kết thúc.

Nếu --lint đã được cung cấp, gawk cảnh báo về các cuộc gọi đến các chức năng không xác định tại thời gian phân tích cú pháp, thay vì tại thời gian chạy. Gọi một hàm không xác định tại thời gian chạy là một lỗi nghiêm trọng.

Từ func có thể được sử dụng thay cho hàm .

NĂNG ĐỘNG NĂNG LỰC CÁC CHỨC NĂNG MỚI

Bắt đầu với phiên bản 3.1 của gawk , bạn có thể tự động thêm các hàm dựng sẵn mới vào trình thông dịch gawk đang chạy. Các chi tiết đầy đủ nằm ngoài phạm vi của trang hướng dẫn sử dụng này; xem GAWK: Lập trình AWK hiệu quả để biết chi tiết.

mở rộng ( đối tượng , hàm )

Tự động liên kết tệp đối tượng được chia sẻ được đặt tên theo đối tượng và gọi hàm trong đối tượng đó, để thực hiện khởi tạo. Cả hai nên được cung cấp dưới dạng chuỗi. Trả về giá trị được trả về bởi hàm .

Chức năng này được cung cấp và ghi lại trong GAWK: Lập trình AWK hiệu quả , nhưng mọi thứ về tính năng này có thể sẽ thay đổi trong bản phát hành tiếp theo. Chúng tôi mạnh mẽ khuyên bạn không nên sử dụng tính năng này cho bất kỳ thứ gì mà bạn không sẵn sàng làm lại.

TÍN HIỆU

pgawk chấp nhận hai tín hiệu. SIGUSR1 làm cho nó đổ một hồ sơ và chức năng ngăn xếp cuộc gọi đến tập tin hồ sơ, đó là awkprof.out , hoặc bất kỳ tập tin được đặt tên với tùy chọn --profile . Sau đó nó tiếp tục chạy. SIGHUP làm cho nó đổ hồ sơ và ngăn xếp cuộc gọi chức năng và sau đó thoát ra.

VÍ DỤ

In và sắp xếp tên đăng nhập của tất cả người dùng: BEGIN {FS = ":"} {print $ 1 | "sắp xếp"} Đếm số dòng trong một tệp: {nlines ++} END {print nlines} Trước mỗi dòng theo số của nó trong tệp: {print FNR, $ 0} Nối và số dòng (biến thể trên một chủ đề): {print NR, $ 0}

Nội bộ hóa

Hằng số chuỗi là chuỗi các ký tự được đặt trong dấu ngoặc kép. Trong 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 như yêu cầu dịch sang ngôn ngữ tự nhiên. Các chuỗi như vậy được đánh dấu trong chương trình AWK với dấu gạch dưới hàng đầu (`` _ ''). Ví dụ,

gawk 'BEGIN {print "xin chào, thế giới"}'

luôn luôn in hello, thế giới . Nhưng,

gawk 'BEGIN {print _ "hello, world"}'

có thể in bonjour, monde ở Pháp.

Có một số bước liên quan đến việc sản xuất và chạy một chương trình AWK có thể bản địa hoá.

1.

Thêm một hành động BEGIN để gán giá trị cho biến TEXTDOMAIN để đặt tên miền văn bản thành tên được liên kết với chương trình của bạn.


BEGIN {TEXTDOMAIN = "myprog"}

Điều này cho phép gawk tìm tệp .mo được liên kết với chương trình của bạn. Không có bước này, gawk sử dụng miền văn bản tin nhắn , có khả năng không chứa bản dịch cho chương trình của bạn.

2.

Đánh dấu tất cả các chuỗi cần được dịch với dấu gạch dưới hàng đầu.

3.

Nếu cần, hãy sử dụng hàm dcgettext () và / hoặc bindtextdomain () trong chương trình của bạn, nếu thích hợp.

4.

Chạy gawk --gen-po -f myprog.awk> myprog.po để tạo tệp .po cho chương trình của bạn.

5.

Cung cấp các bản dịch phù hợp và xây dựng và cài đặt tệp .mo tương ứng.

Các tính năng quốc tế hóa được mô tả đầy đủ chi tiết trong GAWK: Lập trình AWK hiệu quả .

Khả năng tương thích Posix

Mục tiêu chính cho gawk là khả năng tương thích với tiêu chuẩn POSIX, cũng như với phiên bản UNIX mới nhất. Để kết thúc này, gawk kết hợp các tính năng có thể nhìn thấy người dùng sau đây không được mô tả trong cuốn sách AWK, nhưng là một phần của phiên bản phòng thí nghiệm Bell của awk , và đang ở trong tiêu chuẩn POSIX.

Cuốn sách chỉ ra rằng chuyển nhượng dòng lệnh xảy ra khi awk nếu không sẽ mở đối số dưới dạng tệp, sau khi khối BEGIN được thực thi. Tuy nhiên, trong các triển khai trước đó, khi một nhiệm vụ như vậy xuất hiện trước bất kỳ tên tệp nào, nhiệm vụ sẽ xảy ra trước khi khối BEGIN được chạy. Khi ứng dụng được thay đổi để phù hợp với tài liệu của nó, tùy chọn -v cho việc gán biến trước khi thực thi chương trình được thêm vào để chứa các ứng dụng phụ thuộc vào hành vi cũ. (Tính năng này đã được cả hai phòng thí nghiệm Bell và các nhà phát triển GNU đồng ý).

Tùy chọn -W để thực hiện các tính năng cụ thể là từ tiêu chuẩn POSIX.

Khi xử lý đối số, gawk sử dụng tùy chọn đặc biệt `` - '' để báo hiệu kết thúc đối số. Trong chế độ tương thích, nó cảnh báo về nhưng nếu không bỏ qua các tùy chọn không xác định. Trong hoạt động bình thường, các đối số như vậy được chuyển sang chương trình AWK để chương trình xử lý.

Sách AWK không xác định giá trị trả về của srand () . Các tiêu chuẩn POSIX có nó trả về hạt giống nó đang sử dụng, để cho phép theo dõi các chuỗi số ngẫu nhiên. Do đó srand () trong gawk cũng trả về hạt giống hiện tại của nó.

Các tính năng mới khác là: Sử dụng nhiều tùy chọn -f (từ MKS awk ); mảng ENVIRON ; chuỗi \ a , và \ v thoát (thực hiện ban đầu trong gawk và được đưa trở lại phiên bản Bell Laboratories); các hàm dựng sẵn ()toupper () (từ phiên bản của phòng thí nghiệm Bell); và các thông số kỹ thuật chuyển đổi ANSI C trong printf (được thực hiện đầu tiên trong phiên bản Phòng thí nghiệm Bell).

Tính năng lịch sử

Có hai tính năng của việc triển khai AWK lịch sử mà gawk hỗ trợ. Đầu tiên, có thể gọi hàm length () được xây dựng sẵn không chỉ không có đối số, mà thậm chí không có dấu ngoặc đơn! Như vậy,

a = chiều dài # Holy Algol 60, Batman!

giống như một trong hai

a = chiều dài ()
a = chiều dài ($ 0)

Tính năng này được đánh dấu là `` không được chấp nhận '' trong tiêu chuẩn POSIX và gawk sẽ đưa ra cảnh báo về việc sử dụng nó nếu --lint được chỉ định trên dòng lệnh.

Các tính năng khác là việc sử dụng hoặc tiếp tục hoặc phá vỡ báo cáo bên ngoài cơ thể của một thời gian , cho , hoặc làm vòng lặp. Triển khai AWK truyền thống đã xử lý việc sử dụng như vậy tương đương với tuyên bố tiếp theo . Gawk hỗ trợ việc sử dụng này nếu - đã được chỉ định.

Tiện ích mở rộng GNU

Gawk có một số phần mở rộng cho POSIX awk . Chúng được mô tả trong phần này. Tất cả các phần mở rộng được mô tả ở đây có thể được vô hiệu hóa bằng cách gọi gawk với tùy chọn --traditional .

Các tính năng sau đây của gawk không có sẵn trong POSIX awk .

*

Không tìm kiếm đường dẫn nào được thực hiện cho các tệp được đặt tên thông qua tùy chọn -f . Do đó biến môi trường AWKPATH không phải là đặc biệt.

*

Trình tự thoát \ x . (Bị vô hiệu hóa với --posix .)

*

Hàm fflush () . (Bị vô hiệu hóa với --posix .)

*

Khả năng tiếp tục các dòng sau ?:. (Bị vô hiệu hóa với --posix .)

*

Hằng số thập lục phân và thập lục phân trong chương trình AWK.

*

Các biến ARGIND , BINMODE , ERRNO , LINT , RTTEXTDOMAIN không phải là đặc biệt.

*

Biến IGNORECASE và các tác dụng phụ của nó không có sẵn.

*

Biến FIELDWIDTHS và chia tách trường có chiều rộng cố định.

*

Mảng PROCINFO không khả dụng.

*

Việc sử dụng RS như một biểu thức chính quy.

*

Các tên tệp đặc biệt có sẵn cho chuyển hướng I / O không được nhận dạng.

*

Toán tử | & để tạo các quy trình đồng.

*

Khả năng tách ra các ký tự riêng lẻ bằng cách sử dụng chuỗi rỗng làm giá trị của FS và là đối số thứ ba để tách () .

*

Đối số thứ hai tùy chọn cho hàm close () .

*

Đối số thứ ba tùy chọn cho hàm match () .

*

Khả năng sử dụng specifiers vị trí với printfsprintf () .

*

Việc sử dụng xóa mảng để xóa toàn bộ nội dung của một mảng.

*

Việc sử dụng tệp tiếp theo để từ bỏ việc xử lý tệp đầu vào hiện tại.

*

Các và () , asort () , bindtextdomain () , compl () , dcgettext () , gensub () , lshift () , mktime () , hoặc () , rshift () , strftime () , strtonum () , systime ()xor () chức năng.

*

Chuỗi có thể bản địa hóa.

*

Thêm các hàm dựng sẵn mới động với hàm extension () .

Sách AWK không xác định giá trị trả về của hàm close () . Gawk của close () trả về giá trị từ fclose (3), hoặc pclose (3), khi đóng một tập tin đầu ra hoặc đường ống, tương ứng. Nó trả về trạng thái thoát của quá trình khi đóng một đường ống đầu vào. Giá trị trả về là -1 nếu tệp được đặt tên, đường ống hoặc quá trình đồng không được mở bằng chuyển hướng.

Khi gawk được gọi với tùy chọn --traditional , nếu đối số fs cho tùy chọn -F là `` t '', thì FS được đặt thành ký tự tab. Lưu ý rằng gõ gawk -F \ t ... chỉ đơn giản là làm cho hệ vỏ báo giá `` t, '', và không chuyển `` \ t '' sang tùy chọn -F . Vì đây là một trường hợp đặc biệt xấu xí, nó không phải là hành vi mặc định. Hành vi này cũng không xảy ra nếu --posix đã được chỉ định. Để thực sự có được một ký tự tab làm dấu tách trường, tốt nhất là sử dụng dấu nháy đơn: gawk -F '\ t' ....

Xem các lệnh khác : chờ , lp , hoàn thành , execv , getfacl , ioctl , uniq , rmmod , pvcreate , rsh , unix2dos , cal , fs , cd , iwpriv , swapon , autofs , talk , motd , miễn phí , lpr , execl , fdisk , tại , ai , iwconfig , ifconfig , vgdisplay , mở , lsmod , ntohs , mailq , kill , wtmp