awk, mawk, nawk, gawk | CÁI GÌ?


37

Tôi mới bắt đầu học awk và tôi hơi bối rối về tất cả các phiên bản xung quanh. Có "phiên bản" nào được tìm thấy trên tất cả các hệ thống giống Unix không? Giống như, bạn biết, đồng bằng vi? Có awk tiêu chuẩn hỗ trợ tùy chọn -F?

Câu trả lời:


37

awk - phổ biến nhất và sẽ được tìm thấy trên hầu hết các hệ thống giống Unix, phiên bản cũ nhất và kém hơn các hệ thống mới hơn.

mawk - triển khai AWK nhanh mà cơ sở mã của nó dựa trên trình thông dịch mã byte.

nawk - trong khi ngôn ngữ AWK đang được phát triển, các tác giả đã phát hành một phiên bản mới (do đó là n - n ew awk) để tránh nhầm lẫn. Hãy nghĩ về nó giống như Python 3.0 của AWK.

gawk - viết tắt từ GNU awk. Phiên bản duy nhất mà các nhà phát triển đã cố gắng thêm hỗ trợ i18n. Cho phép người dùng viết thư viện chia sẻ C của riêng họ để mở rộng nó bằng "trình cắm" của riêng họ. Phiên bản này là bản triển khai tiêu chuẩn cho Linux, AWK ban đầu được viết cho Unix v7.

Có các phiên bản khác như jawk (triển khai java), bwk (triển khai của Brian W. Kernighan), v.v.


3
Awk ban đầu không có trên bất kỳ hệ thống nào giống Unix mà tôi có sẵn. Thông thường, /usr/bin/awksẽ chạy nawk, hoặc gawk hoặc BusyBox awk (tương tự như hành vi với gawk).
dubiousjim

10
Vào cuối năm 2012, các hệ thống Ubuntu / Debian mặc định cài đặt mawk. Dòng lệnh file /etc/alternatives/awktrở lạisymbolic link to /usr/bin/mawk
Mike Sherrill 'Cat Recall'

MAWK có tất cả các chức năng GAWK như mảng đa chiều thực sự không?
WYSIWYG

2
@JordonBedwell Yep .. Có: sự lặp lại regex là không thể trong mawk. Nó cũng không hỗ trợ mảng đa chiều.
WYSIWYG

1
@dubiousjim Ubuntu có bản gốc awk trong kho vũ trụ.
jarno

6

Bạn chỉ có thể sử dụng awk. Nó được định nghĩa bởi POSIX và do đó phải tồn tại trên tất cả các hệ thống tuân thủ POSIX.

Các -Ftham số được bắt buộc bởi đó là tốt.


1
... nhưng hãy cẩn thận kiểm tra với tiêu chuẩn để cho biết những gì bạn có thể sử dụng để đảm bảo khả năng tương thích với phiên bản khác. Chẳng hạn, đừng sử dụng gensub(), kiểm tra với awk-> gawkvà nghĩ rằng bạn tốt để đi ...
dmckee

1
@dmckee, bạn có thể sử dụng gawk --posixđể làm cho gawk hoạt động theo tiêu chuẩn POSIX. Nó cũng kiểm tra kịch bản của bạn theo tiêu chuẩn. Bạn có thể sử dụng awk --posix '' 2>/dev/nulltrong Ubuntu bất kể là gì, nếu gawk, mawk hoặc awk gốc được sử dụng như awk, nhưng tùy chọn posix chỉ được nhận ra bởi gawk. --poseix phải là lựa chọn cuối cùng cho bản gốc-awk. Bạn có thể sử dụng awk -W posix ''với gawk và mawk.
jarno

1
@dmckee, oh mawk --posix ''thất bại, nếu bạn sử dụng mawk 1.3.3, nhưng thành công với thông báo lỗi, nếu bạn sử dụng mawk 1.3.4
jarno

1

awksẽ có mặt trên mọi hệ thống dựa trên * NIX, nhưng các chi tiết cụ thể chính xác về những gì nó hỗ trợ sẽ thay đổi đôi chút vì nó hoàn toàn có thể /bin/shđược liên kết với một phiên bản khác giống như cách thường được liên kết với một vỏ cụ thể, thường bashhoặc một trong dẫn xuất của nó. (Đối với bản ghi, tôi cũng biết rất nhiều máy móc viđược liên kết vimvới nhau.)


Không cần phải luôn luôn được liên kết với nhau; đôi khi nó liên kết cứng.
dubiousjim

0

Trang Wikipedia AWK là một tài liệu tham khảo khởi đầu tốt để bắt đầu hiểu AWK.
Các Dòng Separator tùy chọn ' -F' được hỗ trợ trong tất cả các biến thể của AWK - afaik.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.