Tiếng AnhTiếng PhápTiếng Tây Ban Nha

Ad


Biểu tượng yêu thích OnWorks

mawk - Trực tuyến trên đám mây

Chạy mawk trong nhà cung cấp dịch vụ lưu trữ miễn phí OnWorks trên Ubuntu Online, Fedora Online, trình giả lập trực tuyến Windows hoặc trình mô phỏng trực tuyến MAC OS

Đây là lệnh mawk có thể được chạy trong nhà cung cấp dịch vụ lưu trữ miễn phí OnWorks bằng cách sử dụng một trong nhiều máy trạm trực tuyến miễn phí của chúng tôi như Ubuntu Online, Fedora Online, trình giả lập trực tuyến Windows hoặc trình mô phỏng trực tuyến MAC OS

CHƯƠNG TRÌNH:

TÊN


mawk - quét mẫu và ngôn ngữ xử lý văn bản

SYNOPSIS


tiếng kêu [-W tùy chọn] [-F giá trị] [-v var = giá trị] [-] 'văn bản chương trình' [tệp ...]
tiếng kêu [-W tùy chọn] [-F giá trị] [-v var = giá trị] [-f tập tin chương trình] [--] [tập tin ...]

MÔ TẢ


tiếng kêu là trình thông dịch cho Ngôn ngữ lập trình AWK. Ngôn ngữ AWK hữu ích cho
thao tác với các tệp dữ liệu, truy xuất và xử lý văn bản cũng như để tạo mẫu và
thử nghiệm với các thuật toán. tiếng kêu là một mới ôi nghĩa là nó triển khai ngôn ngữ AWK
như được định nghĩa trong Aho, Kernighan và Weinberger, Sản phẩm AWK Lập trình Ngôn ngữ, Addison-Wesley
Xuất bản, 1988. (Sau đây được gọi là sách AWK.) tiếng kêu phù hợp với Posix
1003.2 (bản nháp 11.3) định nghĩa về ngôn ngữ AWK chứa một vài tính năng không
được mô tả trong sách AWK, và tiếng kêu cung cấp một số lượng nhỏ các phần mở rộng.

Chương trình AWK là một chuỗi Belt Hold {hoạt động} các cặp và định nghĩa hàm. Ngắn
chương trình được nhập trên dòng lệnh thường được bao gồm trong '' để tránh trình bao
diễn dịch. Các chương trình dài hơn có thể được đọc từ một tệp với tùy chọn -f. Dữ liệu
đầu vào được đọc từ danh sách các tệp trên dòng lệnh hoặc từ đầu vào tiêu chuẩn khi
Danh sách trống. Đầu vào được chia thành các bản ghi như được xác định bởi dấu phân tách bản ghi
biến, RS. Ban đầu, RS = "\ n" và các bản ghi đồng nghĩa với các dòng. Mỗi bản ghi là
so sánh với mỗi Belt Hold và nếu nó khớp, văn bản chương trình cho {hoạt động} is
Thực thi.

LỰA CHỌN


-F giá trị đặt dấu phân cách trường, FS, Để giá trị.

-f hồ sơ Văn bản chương trình được đọc từ hồ sơ thay vì từ dòng lệnh. Nhiều
-f các tùy chọn được cho phép.

-v var = giá trị chỉ định giá trị đến biến chương trình .

- cho biết sự kết thúc rõ ràng của các tùy chọn.

Các tùy chọn trên sẽ khả dụng với bất kỳ triển khai AWK nào tương thích với Posix và
các tùy chọn cụ thể triển khai được mở đầu bằng -W. tiếng kêu cung cấp sáu:

-W phiên bản tiếng kêu viết phiên bản và bản quyền của nó lên stdout và giới hạn biên dịch đối với
stderr và thoát 0.

-W dump viết một trình hợp dịch giống như liệt kê các đại diện bên trong của
chương trình để stdout và thoát 0 (khi biên dịch thành công).

-W tương tác đặt các lần ghi không có bộ đệm vào stdout và các lần đọc có bộ đệm dòng từ stdin.
Các bản ghi từ stdin là các dòng bất kể giá trị của RS.

-W giám đốc điều hành hồ sơ Văn bản chương trình được đọc từ hồ sơ và đây là lựa chọn cuối cùng. Hữu ích trên
hệ thống hỗ trợ #! quy ước "số ma thuật" cho tệp thực thi
tập lệnh.

-W sprintf =num điều chỉnh kích thước của của mawk bộ đệm sprintf nội bộ để num byte. Nhiều hơn
hiếm khi sử dụng tùy chọn này cho biết tiếng kêu nên được biên dịch lại.

-W lực lượng posix_space tiếng kêu không coi '\ n' là khoảng trắng.

Các hình thức ngắn -W[vdiesp] được công nhận và trên một số hệ thống -We là bắt buộc phải tránh
giới hạn độ dài dòng lệnh.

CÁC AWK NGÔN NGỮ


1. chương trình cấu trúc
Chương trình AWK là một chuỗi Belt Hold {hoạt động} các cặp và định nghĩa chức năng người dùng.

Một mẫu có thể là:
BEGIN
END
biểu hiện
biểu hiện, biểu hiện

Một, nhưng không phải cả hai, Belt Hold {hoạt động} có thể được bỏ qua. Nếu như {hoạt động} bị bỏ qua nó là
ngầm định là {print}. Nếu như Belt Hold bị bỏ qua, sau đó nó được kết hợp ngầm định. BEGIN
END các mẫu yêu cầu một hành động.

Các câu lệnh được kết thúc bằng dòng mới, dấu chấm phẩy hoặc cả hai. Các nhóm phát biểu chẳng hạn như
các hành động hoặc nội dung vòng lặp bị chặn qua {...} như trong C. Câu lệnh cuối cùng trong một khối
không cần một trình kết thúc. Dòng trống không có nghĩa; một câu lệnh trống được kết thúc
với dấu chấm phẩy. Các câu lệnh dài có thể được tiếp tục bằng dấu gạch chéo ngược, \. Một tuyên bố có thể
được ngắt mà không có dấu gạch chéo ngược sau dấu phẩy, dấu ngoặc nhọn trái, &&, ||, do, khác, bên phải
ngoặc đơn của một if, trong khi or cho câu lệnh và dấu ngoặc đơn bên phải của một hàm
Định nghĩa. Nhận xét bắt đầu bằng # và kéo dài đến, nhưng không bao gồm cuối dòng.

Các câu lệnh sau đây điều khiển luồng chương trình bên trong các khối.

if ( thể hiện ) tuyên bố

if ( thể hiện ) tuyên bố khác tuyên bố

trong khi ( thể hiện ) tuyên bố

do tuyên bố trong khi ( thể hiện )

cho ( opt_expr ; opt_expr ; opt_expr ) tuyên bố

cho ( in mảng ) tuyên bố

tiếp tục

phá vỡ

2. Ngày các loại, Chuyển đổi sự so sánh
Có hai kiểu dữ liệu cơ bản, số và chuỗi. Hằng số có thể là số nguyên như
-2, số thập phân như 1.08, hoặc trong ký hiệu khoa học như -1.1e4 hoặc .28E-3. Tất cả các con số là
được biểu diễn bên trong và tất cả các phép tính được thực hiện bằng số học dấu phẩy động. Vì vậy đối với
ví dụ, biểu thức 0.2e2 == 20 là true và true được biểu thị bằng 1.0.

Hằng số chuỗi được đặt trong dấu ngoặc kép.

"Đây là một chuỗi có một dòng mới ở cuối. \ N"

Các chuỗi có thể được tiếp tục trên một dòng bằng cách thoát (\) dòng mới. Cuộc trốn chạy sau
trình tự được công nhận.

\\ \
\ ""
\ a alert, ascii 7
\ b backspace, ascii 8
\ t tab, ascii 9
\ n dòng mới, ascii 10
\ v tab dọc, ascii 11
\ f formfeed, ascii 12
\ r xuống dòng, ascii 13
\ ddd 1, 2 hoặc 3 chữ số bát phân cho ascii ddd
\ xhh 1 hoặc 2 chữ số hex cho ascii hh

Nếu bạn thoát khỏi bất kỳ ký tự \ c nào khác, bạn sẽ nhận được \ c, tức là tiếng kêu bỏ qua việc trốn thoát.

Thực sự có ba kiểu dữ liệu cơ bản; thứ ba là con số chuỗi trong đó có cả một
giá trị số và giá trị chuỗi cùng một lúc. Các biến do người dùng xác định đi vào
sự tồn tại khi được tham chiếu lần đầu tiên và được khởi tạo thành vô giá trị, một số và giá trị chuỗi
có giá trị số 0 và giá trị chuỗi "". Dữ liệu được nhập số và chuỗi không tầm thường
đến từ đầu vào và thường được lưu trữ trong các trường. (Xem phần 4).

Loại biểu thức được xác định bởi ngữ cảnh và chuyển đổi kiểu tự động của nó
xảy ra nếu cần. Ví dụ, để đánh giá các câu lệnh

y = x + 2; z = x "xin chào"

Giá trị được lưu trong biến y sẽ được đánh kiểu số. Nếu x không phải là số, giá trị được đọc
từ x được chuyển đổi thành số trước khi nó được thêm vào 2 và được lưu trữ trong y. Giá trị được lưu trữ
trong biến z sẽ được nhập là chuỗi và giá trị của x sẽ được chuyển thành chuỗi nếu
cần thiết và được nối với "hello". (Tất nhiên, giá trị và kiểu được lưu trữ trong x là
không bị thay đổi bởi bất kỳ chuyển đổi nào.) Biểu thức chuỗi được chuyển đổi thành số bằng cách sử dụng
tiền tố số dài nhất như với trên mái nhà(3). Một biểu thức số được chuyển đổi thành chuỗi bằng
thay thế thể hiện với sprintf (CONVFMT, thể hiện), trừ phi thể hiện có thể được đại diện trên máy chủ
máy tính dưới dạng một số nguyên chính xác sau đó nó được chuyển đổi thành chạy nước rút("%NS", thể hiện). Sprintf () là một
AWK được tích hợp sẵn sao chép chức năng của chạy nước rút(3), và CONVFMT là một tích hợp
biến được sử dụng để chuyển đổi nội bộ từ số thành chuỗi và được khởi tạo thành "% .6g".
Chuyển đổi kiểu rõ ràng có thể bị ép buộc, thể hiện "" là chuỗi và thể hiện+0 là số.

Để đánh giá, thể hiện1 hoạt động lại thể hiện2, nếu cả hai toán hạng đều là số hoặc số và chuỗi thì
so sánh là số; nếu cả hai toán hạng là chuỗi thì so sánh là chuỗi; nếu một
toán hạng là chuỗi, toán hạng không phải chuỗi được chuyển đổi và so sánh là chuỗi. Các
kết quả là số, 1 hoặc 0.

Trong ngữ cảnh boolean chẳng hạn như, if ( thể hiện ) tuyên bố, một biểu thức chuỗi đánh giá đúng nếu
và chỉ khi nó không phải là chuỗi rỗng ""; giá trị số nếu và chỉ nếu không phải là số
số không.

3. Đều đặn biểu thức
Trong ngôn ngữ AWK, các bản ghi, trường và chuỗi thường được kiểm tra để khớp với đều đặn
biểu hiện. Biểu thức chính quy được đặt trong dấu gạch chéo và

thể hiện ~/r/

là một biểu thức AWK đánh giá là 1 nếu thể hiện "diêm" r, có nghĩa là một chuỗi con của
thể hiện nằm trong tập hợp các chuỗi được xác định bởi r. Với không có kết quả phù hợp, biểu thức được đánh giá là 0;
thay thế ~ bằng toán tử "không khớp",! ~, đảo ngược ý nghĩa. Như hành động mẫu
cặp,

/r/ { hoạt động } và $0 ~/r/ { hoạt động }

giống nhau và đối với mỗi bản ghi đầu vào khớp với r, hoạt động được thực thi. Trên thực tế, /r/
là một biểu thức AWK tương đương với ($0 ~/r/) bất cứ nơi nào ngoại trừ khi ở bên phải
bên của toán tử so khớp hoặc được truyền dưới dạng đối số cho một hàm tích hợp mong đợi một
đối số biểu thức chính quy.

AWK sử dụng các biểu thức chính quy mở rộng như với ví dụ(1). Biểu thức chính quy
siêu ký tự, tức là, những ký tự có ý nghĩa đặc biệt trong biểu thức chính quy là

^ $. [] | () * +?

Biểu thức chính quy được xây dựng từ các ký tự như sau:

c khớp với bất kỳ ký tự không phải metacharacter nào c.

\c khớp với một ký tự được xác định bởi cùng một chuỗi thoát được sử dụng trong
hằng số chuỗi hoặc ký tự chữ c nếu như \c không phải là một lối thoát
sự nối tiếp.

. khớp với bất kỳ ký tự nào (bao gồm cả dòng mới).

^ khớp với mặt trước của một chuỗi.

$ khớp với mặt sau của một chuỗi.

[c1c2c3 ...] khớp với bất kỳ ký tự nào trong lớp c1c2c3 .... Một khoảng thời gian của
các ký tự được ký hiệu là c1-c2 bên trong một lớp [...].

[^ c1c2c3 ...] khớp với bất kỳ ký tự nào không thuộc lớp c1c2c3 ...

Biểu thức chính quy được xây dựng từ các biểu thức chính quy khác như sau:

r1r2 trận đấu r1 tiếp theo ngay sau đó r2 (nối).

r1 | r2 trận đấu r1 hoặc r2 (luân phiên).

r* diêm r lặp lại không hoặc nhiều lần.

r+ trận đấu r lặp lại một hoặc nhiều lần.

r? diêm r không hoặc một lần.

(r) diêm r, cung cấp phân nhóm.

Mức độ ưu tiên ngày càng tăng của các toán tử là thay thế, nối và một ngôi (*, + hoặc
?).

Ví dụ,

/ ^ [_ a-zA-Z] [_ a-zA-Z0-9] * $ / và
/^[-+]?([0-9]+\.?|\.[0-9])[0-9]*([eE][-+]?[0-9]+)?$/

được khớp với các định danh AWK và hằng số AWK tương ứng. Lưu ý rằng. phải
được thoát để được nhận dạng là dấu thập phân và các ký tự siêu không phải là đặc biệt
bên trong các lớp nhân vật.

Bất kỳ biểu thức nào cũng có thể được sử dụng ở phía bên phải của các toán tử ~ hoặc! ~ Hoặc được chuyển cho một
được tích hợp sẵn mong đợi một biểu thức chính quy. Nếu cần, nó được chuyển đổi thành chuỗi, và
sau đó được hiểu là một biểu thức chính quy. Ví dụ,

BẮT ĐẦU {định danh = "[_a-zA-Z] [_ a-zA-Z0-9] *"}

$ 0 ~ số nhận dạng "^"

in tất cả các dòng bắt đầu bằng số nhận dạng AWK.

tiếng kêu nhận dạng biểu thức chính quy rỗng, //, khớp với chuỗi trống và do đó
được so khớp bởi bất kỳ chuỗi nào ở phía trước, phía sau và giữa mọi ký tự. Ví dụ,

echo abc | mawk {gsub (//, "X"); in }
XaXbXcX

4. Hồ sơ các lĩnh vực
Các bản ghi được đọc lần lượt và được lưu trữ trong lĩnh vực biến $0. Kỷ lục là
chia thành các lĩnh vực được lưu trữ trong $1, $2, ..., $ NF. Biến tích hợp NF được thiết lập
với số lượng trường, và NRFNR được tăng thêm 1. Các trường ở trên $ NF được đặt thành
"".

Chuyển nhượng cho $0 gây ra các lĩnh vực và NF được tính toán lại. Chuyển nhượng cho NF hoặc đến một
nguyên nhân lĩnh vực $0 được tái tạo bằng cách nối $ tôi cách nhau bởi FSO.
Chỉ định cho một trường có chỉ mục lớn hơn NF, tăng NF và nguyên nhân $0 được
tái tạo lại.

Dữ liệu đầu vào được lưu trữ trong các trường là chuỗi, trừ khi toàn bộ trường có dạng số và sau đó
kiểu là số và chuỗi. Ví dụ,

tiếng vang 24 24E |
mawk '{print ($ 1> 100, $ 1> "100", $ 2> 100, $ 2> "100")}'
0 1 1 1

$0$2 là chuỗi và $1 là số và chuỗi. So sánh đầu tiên là số,
thứ hai là chuỗi, thứ ba là chuỗi (100 được chuyển đổi thành "100") và cuối cùng là chuỗi.

5. Biểu thức khai thác
Cú pháp biểu thức tương tự như C. Biểu thức chính là hằng số, chuỗi
hằng, biến, trường, mảng và lời gọi hàm. Giá trị nhận dạng cho một biến,
mảng hoặc hàm có thể là một chuỗi các chữ cái, chữ số và dấu gạch dưới, không
bắt đầu bằng một chữ số. Các biến không được khai báo; chúng tồn tại khi được tham chiếu lần đầu tiên và
khởi tạo thành vô giá trị.

Biểu thức mới được bao gồm các toán tử sau theo thứ tự tăng dần
quyền ưu tiên.

chuyển nhượng = + = - = * = / =% = ^ =
có điều kiện ?:
hợp lý or ||
hợp lý &&
mảng thành viên in
phù hợp ~! ~
quan hệ <> <=> = ==! =
ghép (không có toán tử rõ ràng)
thêm vào Ops + -
mul Ops * /%
một ngôi + -
hợp lý không !
lũy thừa ^
inc Tháng mười hai ++ - (cả bài đăng và trước)
lĩnh vực $

Phép gán, liên kết có điều kiện và lũy thừa từ phải sang trái; các nhà khai thác khác
liên kết từ trái sang phải. Bất kỳ biểu thức nào cũng có thể được đặt trong ngoặc đơn.

6. Mảng
Awk cung cấp mảng một chiều. Các phần tử của mảng được thể hiện dưới dạng mảng[thể hiện]. kinh nghiệm
được chuyển đổi nội bộ thành kiểu chuỗi, vì vậy, ví dụ: A [1] và A ["1"] giống nhau
phần tử và chỉ số thực tế là "1". Mảng được lập chỉ mục bởi chuỗi được gọi là liên kết
mảng. Ban đầu một mảng trống; phần tử tồn tại khi được truy cập lần đầu. Một biểu thức,
thể hiện in mảng đánh giá là 1 nếu mảng[thể hiện] tồn tại, khác đến 0.

Có một dạng của cho câu lệnh lặp qua mỗi chỉ mục của một mảng.

cho ( in mảng ) tuyên bố

bộ cho mỗi chỉ mục của mảng và thực hiện tuyên bố. Thứ tự mà đi ngang qua
các chỉ số của mảng không được xác định.

Tuyên bố, xóa mảng[thể hiện], nguyên nhân mảng[thể hiện] không tồn tại. tiếng kêu hỗ trợ một
sự mở rộng, xóa mảng, sẽ xóa tất cả các phần tử của mảng.

Mảng nhiều chiều được tổng hợp với phép nối bằng cách sử dụng biến tích hợp
BÊN DƯỚI. mảng[thể hiện1,thể hiện2] tương đương với mảng[thể hiện1 BÊN DƯỚI thể hiện2]. Thử nghiệm cho một
phần tử đa chiều sử dụng chỉ mục trong ngoặc đơn, chẳng hạn như

if ((i, j) in A) print A [i, j]

7. Các biến nội dung
Các biến sau được tích hợp sẵn và khởi tạo trước khi thực thi chương trình.

ARGC số lượng đối số dòng lệnh.

ARGV mảng đối số dòng lệnh, 0..ARGC-1.

CONVFMT định dạng để chuyển đổi nội bộ số thành chuỗi, ban đầu = "% .6g".

MÔI TRƯỜNG mảng được lập chỉ mục bởi các biến môi trường. Một chuỗi môi trường, var = giá trị
được lưu trữ dưới dạng MÔI TRƯỜNG[🇧🇷 giá trị.

TÊN TỆP tên của tệp đầu vào hiện tại.

FNR số kỷ lục hiện tại trong TÊN TỆP.

FS chia các bản ghi thành các trường dưới dạng một biểu thức chính quy.

NF số trường trong bản ghi hiện tại.

NR số bản ghi hiện tại trong tổng luồng đầu vào.

OFMT định dạng để in số; ban đầu = "% .6g".

FSO được chèn giữa các trường trên đầu ra, ban đầu = "".

ORS gia hạn kết thúc mỗi bản ghi trên đầu ra, ban đầu = "\ n".

CHIỀU DÀI độ dài được đặt bởi lần gọi cuối cùng đến hàm tích hợp, trận đấu().

RS dấu phân tách bản ghi đầu vào, ban đầu = "\ n".

BẮT ĐẦU LẠI chỉ mục được đặt bởi cuộc gọi cuối cùng tới trận đấu().

BÊN DƯỚI được sử dụng để tạo nhiều chỉ số con mảng, ban đầu = "\ 034".

8. Built-in chức năng
Hàm chuỗi

gsub (r, s, t) gsub (r, s)
Thay thế toàn cầu, mọi đối sánh của biểu thức chính quy r trong biến t is
được thay thế bằng chuỗi s. Số lượng thay thế được trả lại. Nếu như t is
bỏ qua, $0 Được sử dụng. An & trong chuỗi thay thế s được thay thế bởi
chuỗi con phù hợp của t. \ & và \\ lần lượt đặt chữ & và \ vào trong
chuỗi thay thế.

mục lục(NS)
If t là một chuỗi con của s, sau đó là vị trí mà t bắt đầu được trả lại, khác
0 được trả về. Nhân vật đầu tiên của s đang ở vị trí số 1.

chiều dài(s)
Trả về độ dài của chuỗi s.

trận đấu(s, r)
Trả về chỉ mục của đối sánh dài nhất đầu tiên của biểu thức chính quy r in
chuỗi s. Trả về 0 nếu không có kết quả phù hợp. Như một tác dụng phụ, BẮT ĐẦU LẠI được đặt thành
giá trị trả về. CHIỀU DÀI được đặt thành độ dài của khớp hoặc -1 nếu không khớp.
Nếu chuỗi trống được khớp, CHIỀU DÀI được đặt thành 0 và 1 được trả về nếu
trận đấu ở phía trước và chiều dài (s) +1 được trả lại nếu trận đấu ở
đằng sau.

tách ra(s, A, r) tách ra(s, A)
Chuỗi s được chia thành các trường bằng biểu thức chính quy r và các lĩnh vực là
được tải vào mảng A. Số trường được trả về. Xem phần 11
dưới đây để biết thêm chi tiết. Nếu như r bị bỏ qua, FS Được sử dụng.

sprintf (định dạng, danh sách expr)
Trả về một chuỗi được tạo từ danh sách expr theo định dạng. Xem
mô tả của printf () bên dưới.

phụ (r, s, t) phụ (r, s)
Thay thế một lần, giống như gsub () ngoại trừ nhiều nhất một thay thế.

substr (tội) substr (s, tôi)
Trả về chuỗi con của chuỗi s, bắt đầu từ chỉ mục i, chiều dài n. Nếu n
bị bỏ qua, hậu tố của s, Bắt đầu từ i Được trả lại.

tolower (s)
Trả lại bản sao của s với tất cả các ký tự chữ hoa được chuyển đổi thành chữ thường.

người du hành (s)
Trả lại bản sao của s với tất cả các ký tự chữ thường được chuyển đổi thành chữ hoa.

Các hàm số học

atan2 (y, x) Arctan của y/x giữa -pi và pi.

cos (x) Hàm cosine, x tính bằng radian.

exp (x) Hàm số mũ.

int (x) Trả lại x bị cắt ngắn về phía không.

log (x) Lôgarit tự nhiên.

rand () Trả về một số ngẫu nhiên từ XNUMX đến XNUMX.

tội(x) Hàm sin, x tính bằng radian.

sqrt (x) Trả về căn bậc hai của x.

srand (thể hiện) srand ()
Gieo hạt trình tạo số ngẫu nhiên, sử dụng đồng hồ nếu thể hiện bị bỏ qua, và
trả về giá trị của hạt giống trước đó. tiếng kêu gieo số ngẫu nhiên
máy phát điện từ đồng hồ khi khởi động nên không cần thực sự gọi
srand (). Srand (thể hiện) hữu ích cho việc lặp lại các chuỗi ngẫu nhiên giả.

9. Đầu vào đầu ra
Có hai câu lệnh đầu ra, inprintf.

in viết $0 ORS gia hạn đến đầu ra tiêu chuẩn.

in thể hiện1, thể hiện2, ..., thể hiệnn
viết thể hiện1 FSO thể hiện2 FSO hữu ích. Cảm ơn ! thể hiệnn ORS gia hạn đến đầu ra tiêu chuẩn. Số
các biểu thức được chuyển đổi thành chuỗi với OFMT.

printf định dạng, danh sách expr
nhân bản ghi hàm thư viện printf C thành đầu ra tiêu chuẩn. Các
thông số kỹ thuật định dạng ANSI C hoàn chỉnh được công nhận với chuyển đổi% c,
% d,% e,% E,% f,% g,% G,% i,% o,% s,% u,% x,% X và %% và chuyển đổi
định tính h và l.

Danh sách đối số để print hoặc printf có thể được đặt trong dấu ngoặc đơn tùy ý. In
định dạng số bằng cách sử dụng OFMT hoặc "% d" cho các số nguyên chính xác. "% c" với đối số là số
in ký tự 8 bit tương ứng, với một đối số chuỗi, nó sẽ in ký tự đầu tiên
ký tự của chuỗi. Đầu ra của print và printf có thể được chuyển hướng đến một tệp hoặc
ra lệnh bằng cách nối> hồ sơ, >> hồ sơ hoặc | lệnh vào cuối câu lệnh in.
Chuyển hướng mở ra hồ sơ or lệnh chỉ một lần, các chuyển hướng tiếp theo nối vào
dòng mở. Theo quy ước, tiếng kêu liên kết tên tệp "/ dev / stderr"với stderr mà
cho phép print và printf được chuyển hướng tới stderr. tiếng kêu cũng liên kết "-" và
"/ dev / stdout" với stdin và stdout cho phép các luồng này được chuyển tới các hàm.

Chức năng đầu vào theo hàng có các biến thể sau.

theo hàng
đọc vào $0, cập nhật các trường, NF, NRFNR.

theo hàng hồ sơ
đọc vào $0 từ hồ sơ, cập nhật các trường và NF.

theo hàng
đọc bản ghi tiếp theo vào , cập nhật NRFNR.

theo hàng < hồ sơ
đọc bản ghi tiếp theo của hồ sơ trong .

lệnh | theo hàng
ghi lại một bản ghi từ lệnh trong $0 và cập nhật các trường và NF.

lệnh | theo hàng
ghi lại một bản ghi từ lệnh trong .

Getline trả về 0 trên phần cuối của tệp, -1 khi có lỗi, nếu không thì 1.

Các lệnh ở cuối đường ống được thực thi bởi / bin / sh.

Các chức năng gần(thể hiện) đóng tệp hoặc đường dẫn được liên kết với thể hiện. Đóng trả về 0 nếu
thể hiện là một tệp đang mở, trạng thái thoát nếu thể hiện là một lệnh có khung, và -1 ngược lại. Gần
được sử dụng để đọc lại một tệp hoặc lệnh, đảm bảo rằng đầu kia của ống xuất đã hoàn thành
hoặc bảo tồn tài nguyên tệp.

Các chức năng tuôn ra(thể hiện) xóa tệp đầu ra hoặc đường ống được liên kết với thể hiện. tuôn ra
trả về 0 nếu thể hiện là một luồng đầu ra mở khác -1. Fflush mà không có đối số tuôn ra
stdout. Fflush với đối số trống ("") xóa tất cả đầu ra đang mở.

Các chức năng hệ thống(thể hiện) sử dụng / Bin / sh để thực hiện thể hiện và trả về trạng thái thoát của
lệnh thể hiện. Những thay đổi được thực hiện đối với MÔI TRƯỜNG mảng không được chuyển cho các lệnh được thực thi với
hệ thống hoặc đường ống.

10. người sử dang xác định chức năng
Cú pháp cho một hàm do người dùng xác định là

chức năng Tên( args. ) { báo cáo }

Phần thân hàm có thể chứa một câu lệnh trả về

trở lại opt_expr

Không bắt buộc phải có câu lệnh trả lại. Các lời gọi hàm có thể được lồng vào nhau hoặc đệ quy. Chức năng
là các biểu thức được truyền theo giá trị và mảng bằng tham chiếu. Các đối số phụ đóng vai trò là đối số cục bộ
các biến và được khởi tạo thành vô giá trị. Ví dụ: csplit (s, A) đặt mỗi ký tự của s
thành mảng A và trả về độ dài của s.

hàm csplit (s, A, n, i)
{
n = chiều dài
cho (i = 1; i <= n; i ++) A [i] = substr (s, i, 1)
trả lại n
}

Việc đặt thêm khoảng cách giữa các đối số được truyền và các biến cục bộ là thông thường.
Các hàm có thể được tham chiếu trước khi chúng được định nghĩa, nhưng tên hàm và dấu '(' của
các đối số phải chạm vào nhau để tránh nhầm lẫn với nối.

11. Tách dây, hồ sơ các tập tin
Các chương trình Awk sử dụng cùng một thuật toán để chia các chuỗi thành các mảng với split () và các bản ghi
vào các lĩnh vực trên FS. tiếng kêu về cơ bản sử dụng cùng một thuật toán để chia tệp thành các bản ghi
on RS.

Tách ra(expr, A, sep) hoạt động như sau:

(1) Nếu Tháng Chín bị bỏ qua, nó được thay thế bằng FS. Tháng Chín có thể là một biểu thức hoặc
biểu hiện thông thường. Nếu nó là một biểu thức của kiểu không phải chuỗi, nó là
được chuyển đổi thành chuỗi.

(2) Nếu Tháng Chín = "" (một khoảng trắng), sau đó được cắt từ phía trước và
sau thể hiệnTháng Chín trở thành . tiếng kêu xác định như thường lệ
biểu thức / [\ t \ n] +/. Nếu không thì Tháng Chín được coi là một biểu thức chính quy,
ngoại trừ việc các ký tự meta bị bỏ qua đối với một chuỗi có độ dài 1, ví dụ:
split (x, A, "*") và split (x, A, / \ * /) giống nhau.

(3) Nếu thể hiện không phải là chuỗi, nó được chuyển đổi thành chuỗi. Nếu như thể hiện sau đó là trống rỗng
string "", split () trả về 0 và A được đặt trống. Nếu không, tất cả không
đối sánh chồng chéo, không rỗng và đối sánh dài nhất trong số Tháng Chín in thể hiện, tách rời thể hiện trong
các trường được tải vào A. Các trường được đặt trong A [1], A [2], ...,
A [n] và split () trả về n, số trường là số
khớp cộng với một. Dữ liệu được đặt trong A trông số là số được nhập và
chuỗi.

Việc tách các bản ghi thành các trường hoạt động giống nhau ngoại trừ các phần được tải vào $1, $2, ...,
$ NF. Nếu $0 trống rỗng, NF được đặt thành 0 và tất cả $i đến "".

tiếng kêu tách các tệp thành các bản ghi bằng cùng một thuật toán, nhưng với sự khác biệt nhỏ là
RS thực sự là một dấu chấm dứt thay vì một dấu phân cách. (ORS gia hạn thực sự là một kẻ hủy diệt quá).

Ví dụ: nếu FS = ": +" và $0 = "a :: b:", sau đó NF = 3 và $1 = "a", $2 = "b" và $3 =
"", nhưng nếu "a :: b:" là nội dung của tệp đầu vào và RS = ": +", thì có
hai bản ghi "a" và "b".

RS = "" không phải là đặc biệt.

If FS = "", sau đó tiếng kêu phá kỷ lục thành các ký tự riêng lẻ và tương tự,
tách ra(s, A,"") đặt các ký tự riêng lẻ của s trong A.

12. Nhiều dòng hồ sơ
từ tiếng kêu thông dịch viên RS như một biểu thức chính quy, các bản ghi nhiều dòng rất dễ dàng. Thiết lập RS
= "\ n \ n +", tạo một hoặc nhiều dòng trống phân tách các bản ghi. Nếu như FS = "" (mặc định),
sau đó là các dòng mới, theo các quy tắc cho ở trên, trở thành khoảng trắng và các dòng mới đơn lẻ là
dải phân cách hiện trường.

Ví dụ: nếu một tệp là "ab \ nc \ n \ n", RS = "\ n \ n +" và FS = "", sau đó có
một bản ghi "ab \ nc" với ba trường "a", "b" và "c". Thay đổi FS = "\ n", cho
hai trường "ab" và "c"; thay đổi FS = "", đưa ra một trường giống với
ghi lại.

Nếu bạn muốn các dòng có dấu cách hoặc tab được coi là trống, hãy đặt RS = "\ n ([\ t] * \ n) +".
Để tương thích với các awk khác, cài đặt RS = "" có tác dụng tương tự như nếu dòng trống
được loại bỏ từ mặt trước và mặt sau của tệp và sau đó hồ sơ được xác định như thể RS =
"\ n \ n +". Posix yêu cầu rằng "\ n" luôn phân tách các bản ghi khi RS = "" bất kể
giá trị của FS. tiếng kêu không hỗ trợ quy ước này, vì việc xác định "\ n" là
làm cho nó không cần thiết.

Hầu hết thời gian khi bạn thay đổi RS đối với các bản ghi nhiều dòng, bạn cũng sẽ muốn thay đổi
ORS gia hạn thành "\ n \ n" để khoảng cách bản ghi được giữ nguyên trên đầu ra.

13. chương trình thực hiện
Phần này mô tả thứ tự thực hiện chương trình. Ngày thứ nhất ARGC được đặt thành tổng số
số đối số dòng lệnh được chuyển đến giai đoạn thực thi của chương trình. ARGV [0] is
đặt tên của trình thông dịch AWK và ARGV [1] hữu ích. Cảm ơn ! ARGV [ARGC-1] giữ phần còn lại
đối số dòng lệnh không bao gồm các tùy chọn và nguồn chương trình. Ví dụ với

mawk -f prog v = 1 A t = xin chào B

ARGC = 5 với ARGV [0] = "mawk", ARGV [1] = "v = 1", ARGV [2] = "A", ARGV [3] = "t = xin chào" và
ARGV [4] = "B".

Tiếp theo, mỗi BEGIN khối được thực hiện theo thứ tự. Nếu chương trình bao gồm hoàn toàn BEGIN
khối, sau đó quá trình thực thi kết thúc, nếu không một luồng đầu vào sẽ được mở và quá trình thực thi tiếp tục.
If ARGC bằng 1, dòng đầu vào được đặt thành stdin, khác các đối số dòng lệnh
ARGV [1] hữu ích. Cảm ơn ! ARGV [ARGC-1] được kiểm tra đối số tệp.

Các đối số dòng lệnh chia thành ba tập hợp: đối số tệp, đối số gán
và chuỗi rỗng "". Một bài tập có hình thức =chuỗi. Khi một ARGV [i] được kiểm tra
như một đối số tệp có thể có, nếu nó trống, nó sẽ bị bỏ qua; nếu nó là một nhiệm vụ
đối số, việc gán cho diễn ra và i bỏ qua đối số tiếp theo; khác ARGV [i]
được mở để nhập. Nếu nó không mở được, quá trình thực thi sẽ kết thúc với mã thoát 2. Nếu không
đối số dòng lệnh là đối số tệp, sau đó đầu vào đến từ stdin. Getline trong một BEGIN
hành động mở đầu vào. "-" làm đối số tệp biểu thị stdin.

Khi một luồng đầu vào được mở, mỗi bản ghi đầu vào được kiểm tra với từng Belt Hold, và nếu nó
trận đấu, liên kết hoạt động được thực thi. Một mẫu biểu thức phù hợp nếu nó là
boolean true (xem cuối phần 2). MỘT BEGIN mẫu khớp trước khi bất kỳ đầu vào nào có
đã được đọc, và một END phù hợp với mẫu sau khi tất cả đầu vào đã được đọc. Một mô hình phạm vi,
thể hiện1,thể hiện2, phù hợp với mọi kỷ lục giữa trận đấu của thể hiện1 và trận đấu thể hiện2
bao gồm.

Khi kết thúc tệp xảy ra trên luồng đầu vào, các đối số dòng lệnh còn lại là
đã kiểm tra đối số tệp và nếu có đối số thì nó được mở, nếu không thì END Belt Hold is
được coi là phù hợp và tất cả END hành động được thực hiện.

Trong ví dụ, phép gán v = 1 diễn ra sau BEGIN hành động được thực hiện, và
dữ liệu được đặt trong v là số và chuỗi được nhập. Dữ liệu đầu vào sau đó được đọc từ tệp A. Khi kết thúc
của tệp A, t được đặt thành chuỗi "hello" và B được mở để nhập. Ở cuối tệp B,
các END hành động được thực hiện.

Luồng chương trình tại Belt Hold {hoạt động} mức độ có thể được thay đổi với

tiếp theo
ra opt_expr

các câu lệnh. MỘT tiếp theo câu lệnh khiến bản ghi đầu vào tiếp theo được đọc và kiểm tra mẫu
để bắt đầu lại với cái đầu tiên Belt Hold {hoạt động} cặp trong chương trình. Một ra tuyên bố nguyên nhân
thực hiện ngay lập tức END hành động hoặc chấm dứt chương trình nếu không có hoặc nếu
ra xảy ra trong một END hoạt động. Các opt_expr đặt giá trị thoát của chương trình trừ khi
bị ghi đè sau đó ra hoặc lỗi tiếp theo.

VÍ DỤ


1. giả lập con mèo.

{ in }

2. giả lập wc.

{chars + = length ($ 0) + 1 # thêm một cái cho \ n
từ + = NF
}

KẾT THÚC {in NR, từ, ký tự}

3. đếm số lượng "từ thực" duy nhất.

BẮT ĐẦU {FS = "[^ A-Za-z] +"}

{for (i = 1; i <= NF; i ++) word [$ i] = ""}

KẾT THÚC {xóa từ [""]
cho (tôi trong word) cnt ++
in cnt
}

4. tính tổng trường thứ hai của mọi bản ghi dựa trên trường đầu tiên.

$ 1 ~ / tín dụng | gain / {sum + = $ 2}
$ 1 ~ / ghi nợ | lỗ / {sum - = $ 2}

HẾT {in sum}

5. sắp xếp một tệp, so sánh dưới dạng chuỗi

{line [NR] = $ 0 ""} # đảm bảo loại so sánh
# trong trường hợp một số dòng có dạng số

HẾT {isort (dòng, NR)
for (i = 1; i <= NR; i ++) in dòng [i]
}

#insertion loại A [1..n]
hàm isort (A, n, i, j, giữ)
{
cho (i = 2; i <= n; i ++)
{
giữ = A [j = i]
trong khi (A [j-1]> giữ)
{ NS-- ; A [j + 1] = A [j]}
A [j] = giữ
}
# sentinel A [0] = "" sẽ được tạo nếu cần
}

Tương thích CÁC VẤN ĐỀ


Định nghĩa Posix 1003.2 (bản nháp 11.3) của ngôn ngữ AWK là AWK như được mô tả trong AWK
đặt trước với một vài tiện ích mở rộng xuất hiện trong SystemVR4 nawk. Các phần mở rộng là:

Các hàm mới: toupper () và tolower ().

Các biến mới: ENVIRON [] và CONVFMT.

Thông số kỹ thuật chuyển đổi ANSI C cho printf () và sprintf ().

Các tùy chọn lệnh mới: -v var = value, nhiều tùy chọn -f và các tùy chọn triển khai
làm đối số cho -W.

Posix AWK được định hướng hoạt động trên các tệp một dòng tại một thời điểm. RS có thể được thay đổi từ "\ n"
sang một ký tự đơn lẻ khác, nhưng thật khó để tìm thấy bất kỳ công dụng nào cho việc này - không có
ví dụ trong sách AWK. Theo quy ước, RS = "", phân tách một hoặc nhiều dòng trống
các bản ghi, cho phép các bản ghi nhiều dòng. Khi nào RS = "", "\ n" luôn là dấu phân tách trường
bất kể giá trị trong FS.

tiếng kêu, mặt khác, cho phép RS là một biểu thức chính quy. Khi "\ n" xuất hiện trong
hồ sơ, nó được coi là không gian, và FS luôn xác định các trường.

Xóa dòng tại một thời điểm có thể làm cho một số chương trình trở nên đơn giản hơn và thường có thể cải thiện
màn biểu diễn. Ví dụ: làm lại ví dụ 3 từ trên,

BẮT ĐẦU {RS = "[^ A-Za-z] +"}

{word [$ 0] = ""}

KẾT THÚC {xóa từ [""]
cho (tôi trong word) cnt ++
in cnt
}

đếm số lượng từ duy nhất bằng cách lập bản ghi mỗi từ. Trên các tệp có kích thước vừa phải,
tiếng kêu thực thi nhanh hơn gấp đôi do vòng lặp bên trong được đơn giản hóa.

Chương trình sau đây thay thế mỗi nhận xét bằng một khoảng trắng trong tệp chương trình C,

BẮT ĐẦU {
RS = "/ \ * ([^ *] | \ * + [^ / *]) * \ * + /"
# nhận xét là dấu phân tách bản ghi
ORS = ""
getline giữ
}

{in giữ; giữ = $ 0}

HẾT {printf "% s", giữ}

Cần lưu vào bộ đệm một bản ghi để tránh kết thúc bản ghi cuối cùng bằng một khoảng trắng.

Với tiếng kêu, tất cả những điều sau đây đều tương đương,

x ~ / a \ + b / x ~ "a \ + b" x ~ "a \\ + b"

Các chuỗi được quét hai lần, một lần dưới dạng chuỗi và một lần dưới dạng biểu thức chính quy. Trên
quét chuỗi, tiếng kêu bỏ qua lối thoát trên các ký tự không thoát trong khi sách AWK ủng hộ
\c được công nhận là c yêu cầu thoát kép các ký tự meta trong
dây. Posix từ chối rõ ràng xác định hành vi buộc các chương trình bị động
phải chạy dưới nhiều loại awk để sử dụng tính di động hơn nhưng ít dễ đọc hơn,
bỏ trốn.

Posix AWK không nhận dạng chuỗi thoát "/ dev / std {out, err}" hoặc \ x hex trong chuỗi.
Không giống như ANSI C, tiếng kêu giới hạn số chữ số theo sau \ x là hai chữ số hiện tại
triển khai chỉ hỗ trợ các ký tự 8 bit. Tích hợp sẵn tuôn ra lần đầu tiên xuất hiện trong một
gần đây (1993) AT&T awk được phát hành cho netlib, và không phải là một phần của tiêu chuẩn posix.
Tổng hợp xóa với xóa mảng không phải là một phần của tiêu chuẩn posix.

Posix rõ ràng để lại hành vi của FS = "" không xác định và các đề cập chia tách
ghi lại thành các ký tự như một cách diễn giải khả thi, nhưng hiện tại cách sử dụng này không
di động qua các triển khai.

Cuối cùng, đây là cách tiếng kêu xử lý các trường hợp đặc biệt không được thảo luận trong sách AWK hoặc
Bản nháp Posix. Sẽ không an toàn nếu giả định sự nhất quán giữa các awks và an toàn khi bỏ qua phần tiếp theo
phần.

substr (s, i, n) trả về các ký tự của s trong giao điểm của đóng
khoảng [1, length (s)] và nửa mở [i, i + n). Khi này
nút giao là trống, chuỗi trống được trả về; so substr ("ABC", 1, 0) = ""
và substr ("ABC", -4, 6) = "A".

Mọi chuỗi, bao gồm cả chuỗi trống, khớp với chuỗi trống ở phía trước,
s ~ // và s ~ "", luôn là 1 như là đối sánh (s, //) và đối sánh (s, ""). Hai cái cuối cùng
định CHIỀU DÀI để 0.

chỉ số (s, t) luôn giống với đối sánh (s, t1) trong đó t1 giống với t với
siêu nhân vật đã trốn thoát. Do đó, tính nhất quán với đối sánh yêu cầu chỉ mục đó (s, "")
luôn trả về 1. Đồng thời là điều kiện, chỉ số (s, t)! = 0 nếu và chỉ t là một chuỗi con
của s, yêu cầu chỉ mục ("", "") = 1.

Nếu getline gặp phần cuối của tệp, getline var, để lại var không thay đổi. Tương tự,
khi vào END hành động, $0, các lĩnh vực và NF giá trị của chúng không bị thay đổi
bản ghi cuối cùng.

Sử dụng mawk trực tuyến bằng các dịch vụ onworks.net


Máy chủ & Máy trạm miễn phí

Tải xuống ứng dụng Windows & Linux

  • 1
    wxPython
    wxPython
    Một tập hợp các mô-đun mở rộng Python
    bọc các lớp GUI đa nền tảng từ
    wxWidgets.. Đối tượng: Nhà phát triển. Người dùng
    giao diện: X Window System (X11), Win32...
    Tải xuống wxPython
  • 2
    góifilemanager
    góifilemanager
    Đây là trình quản lý tệp gói Total War
    dự án, bắt đầu từ phiên bản 1.7. Một
    giới thiệu ngắn về Warscape
    mod: ...
    Tải xuống packfilemanager
  • 3
    IPerf2
    IPerf2
    Một công cụ lưu lượng mạng để đo lường
    Hiệu suất TCP và UDP với các chỉ số
    xung quanh cả thông lượng và độ trễ. Các
    các mục tiêu bao gồm duy trì một hoạt động
    cá tuyết iperf ...
    Tải xuống IPerf2
  • 4
    fre: ac - công cụ chuyển đổi âm thanh miễn phí
    fre: ac - công cụ chuyển đổi âm thanh miễn phí
    fre:ac là một công cụ chuyển đổi âm thanh và đĩa CD miễn phí
    trình trích xuất cho các định dạng và bộ mã hóa khác nhau.
    Nó có tính năng MP3, MP4/M4A, WMA, Ogg
    Định dạng Vorbis, FLAC, AAC và Bonk
    ủng hộ, ...
    Tải xuống fre:ac - trình chuyển đổi âm thanh miễn phí
  • 5
    Matplotlib
    Matplotlib
    Matplotlib là một thư viện toàn diện
    để tạo tĩnh, động và
    trực quan hóa tương tác bằng Python.
    Matplotlib giúp mọi thứ trở nên dễ dàng và
    điều khó ...
    Tải xuống Matplotlib
  • 6
    người máy
    người máy
    Viết logic chatbot của bạn một lần và
    kết nối nó với một trong những cái có sẵn
    dịch vụ nhắn tin, bao gồm cả Amazon
    Alexa, Facebook Messenger, Slack,
    Telegram hoặc thậm chí yo ...
    Tải xuống BotMan
  • Khác »

Lệnh Linux

Ad