- Sự khác biệt giữa awk và sed là gì?
- Những loại ứng dụng nào là trường hợp sử dụng tốt nhất cho các công cụ sed và awk?
Câu trả lời:
sed
là một biên tập viên dòng. Nó hoạt động với các luồng ký tự trên cơ sở mỗi dòng. Nó có một ngôn ngữ lập trình nguyên thủy bao gồm các vòng lặp kiểu goto và các điều kiện đơn giản (ngoài việc khớp mẫu và khớp địa chỉ). Về cơ bản chỉ có hai "biến": không gian mẫu và không gian giữ. Khả năng đọc các kịch bản có thể khó khăn. Các phép toán học cực kỳ khó xử.
Có nhiều phiên bản khác nhau sed
với các mức hỗ trợ khác nhau cho các tùy chọn dòng lệnh và các tính năng ngôn ngữ.
awk
được định hướng theo các trường phân định trên cơ sở mỗi dòng. Nó có mạnh mẽ nhiều hơn nữa cấu trúc lập trình bao gồm if
/ else
, while
, do
/ while
và for
(C-phong cách và mảng lặp lại). Có sự hỗ trợ đầy đủ cho các biến và mảng kết hợp một chiều cộng với mảng đa chiều (IMO). Các phép toán tương tự như trong C. Nó có printf
và hàm. Chữ "K" trong "AWK" là viết tắt của " K ernighan" như trong "Kernighan và Ritchie" của cuốn sách "Ngôn ngữ lập trình C" nổi tiếng (đừng quên A ho và W einberger). Người ta có thể hình dung viết một máy phát hiện đạo văn học thuật bằng cách sử dụng awk
.
GNU awk
( gawk
) có nhiều phần mở rộng, bao gồm các mảng đa chiều thực sự trong phiên bản mới nhất. Có các biến thể khác awk
bao gồm mawk
và nawk
.
Cả hai chương trình đều sử dụng biểu thức chính quy để chọn và xử lý văn bản.
Tôi sẽ có xu hướng sử dụng sed
nơi có các mẫu trong văn bản. Ví dụ: bạn có thể thay thế tất cả các số âm trong một số văn bản ở dạng "dấu trừ theo sau là một chuỗi các chữ số" (ví dụ: "-231,45") bằng biểu mẫu "dấu ngoặc kế toán" (ví dụ "(231,45)" ) sử dụng cái này (có chỗ để cải thiện):
sed 's/-\([0-9.]\+\)/(\1)/g' inputfile
Tôi sẽ sử dụng awk
khi văn bản trông giống như các hàng và cột hoặc, như awk
đề cập đến chúng "bản ghi" và "trường". Nếu tôi định thực hiện một thao tác tương tự như trên, nhưng chỉ trên trường thứ ba trong một tệp được phân cách bằng dấu phẩy đơn giản, tôi có thể làm một cái gì đó như:
awk -F, 'BEGIN {OFS = ","} {gsub("-([0-9.]+)", "(" substr($3, 2) ")", $3); print}' inputfile
Tất nhiên đó chỉ là những ví dụ rất đơn giản không minh họa đầy đủ các khả năng mà mỗi khả năng phải cung cấp.
sed
: sed.sourceforge.net/#scripts
1) Sự khác biệt giữa awk và sed là gì?
Cả hai đều là công cụ biến đổi văn bản. NHƯNG awk có thể làm nhiều việc hơn ngoài việc thao túng văn bản. Bản thân nó là ngôn ngữ lập trình với hầu hết những điều bạn học được trong lập trình, như mảng, vòng lặp, điều khiển luồng nếu / khác, v.v. Bạn cũng có thể "lập trình" trong sed, nhưng bạn sẽ không muốn duy trì mã được viết trong đó .
2) Loại ứng dụng nào là trường hợp sử dụng tốt nhất cho các công cụ sed và awk?
Kết luận: Sử dụng sed để phân tích văn bản rất đơn giản. Bất cứ điều gì ngoài điều đó, awk là tốt hơn. Trong thực tế, bạn có thể bỏ sed hoàn toàn và chỉ cần sử dụng awk. Vì các chức năng của chúng chồng chéo và awk có thể làm nhiều hơn, chỉ cần sử dụng awk. Bạn sẽ giảm thời gian học tập của bạn là tốt.
sed
, 's/search/replace'
cách gõ dễ dàng hơn awk
cú pháp và là thứ bạn cần hầu hết thời gian.
Cả hai công cụ đều có nghĩa là để làm việc với văn bản và có những nhiệm vụ cả hai công cụ có thể được sử dụng cho.
Đối với tôi quy tắc để phân tách chúng là: Sử dụng sed
để tự động hóa các tác vụ bạn sẽ làm khác trong trình soạn thảo văn bản theo cách thủ công. Đó là lý do tại sao nó được gọi là trình chỉnh sửa luồng . (Bạn có thể sử dụng các lệnh tương tự để chỉnh sửa văn bản trong vim). Sử dụng awk
nếu bạn muốn phân tích văn bản, nghĩa là các trường đếm, tính tổng, trích xuất và sắp xếp lại các cấu trúc, v.v.
Ngoài ra bạn không nên quên về grep
. Sử dụng grep
nếu bạn chỉ muốn tìm kiếm / trích xuất một cái gì đó trong một văn bản (tập tin)