2009-08-30 25 views
5

Tôi sử dụng sed cho một loạt ptovess nơi tôi không thể làm điều đó với awk. Vould awk đã làm điều đó? Hoặc là nó là một vấn đề của sự lựa chọn và gọi awk và sed tương đương cho việc sử dụng. Cả hai đều thực hiện tìm kiếm thông thường thay thế tương tự với i/o. Có một ví dụ tốt những gì không thể được thực hiện với một mà người kia có thể?Điều gì có thể làm awk rằng sed có thể không?

Trả lời

8

Một điểm khác biệt chính là chương trình awk có thể duy trì trạng thái và có thể hoạt động bằng cách sử dụng nhiều lần truyền trên cùng một dữ liệu. Một lời gọi sed là nhất thiết phải vượt qua trạng thái vô hạn vì sed (Stream EDitor) vốn đã định hướng luồng. Lợi thế, mặc dù, là điều này làm cho sed đơn giản hơn và thích hợp hơn để sử dụng trong các chuỗi ống.

+2

Tôi không thấy rằng sed là "thích hợp hơn để sử dụng trong các chuỗi ống" - chỉ vì awk CAN thực hiện nhiều lần, không có gì buộc bạn thực sự làm như vậy. Đối với nhiều nhiệm vụ liên quan đến đường ống (chọn các trường cụ thể, ví dụ) awk thì đơn giản hơn nhiều so với sed. –

+0

@anon Nó đánh tôi như là lẻ như thế nào bạn đang chuyển thread này trong một số công cụ "awk vs sed". Không hữu ích chút nào. – ata

+0

Tôi đã thay đổi điều này thành câu trả lời được chấp nhận. Cảm ơn! –

2

SED là trình chỉnh sửa luồng và do đó không có biến và một số cấu trúc khác như AWK có. AWK là một ngôn ngữ hoàn toàn chính thức.

+0

AWK, không giống như sed, tốt cho việc tìm kiếm và thay thế cho bất kỳ mã unicode hoặc ascii nào? do đó, xử lý tất cả các ký tự điều khiển bao gồm dòng mới, EOF, e.t.c. dưới dạng nhị phân? – barlop

2

G'day,

Awk mạnh hơn. sed có xu hướng hạn chế hơn trong những gì nó có thể làm.

Sed là tốt cho các thay đổi dựa trên dòng dữ liệu. Nó có một số cấu trúc vòng lặp đơn giản, công cụ regexp ed/ex/vi thông thường và những thứ thay thế, câu lệnh ghép, quyết định, vv Hầu hết mọi người sử dụng nó để sửa đổi dữ liệu đường ống.

Làm mờ là tốt để lọc hoặc sắp xếp lại dữ liệu. Nó chủ yếu được sử dụng để báo cáo.

Tôi khuyên bạn nên xem cuốn sách tuyệt vời của Dale Dougherty "sed & awk" (sanitised Amazon link). BTW Nó có một trong những giải thích tốt nhất của regexps trong đó là tốt.

Nhiều người sẽ nói sử dụng Perl anyway! (-:

Edit: Quên nói rằng ngôn ngữ awk là khá C như đó là không ngạc nhiên khi cho rằng 'k' trong awk là viết tắt của Brian Kernighan Có Đó Brian Kernighan

..!

Ngoài ra, sed chỉ hoạt động trên dòng dữ liệu trong khi awk hoạt động trên cả hai dòng dữ liệu và các tập tin.

HTH

cổ vũ, sed chỉ hoạt động trên dòng dữ liệu trong khi awk hoạt động trên cả hai dòng dữ liệu và các tập tin.

+1

GNU sed thực sự hỗ trợ chỉnh sửa tệp tại chỗ. –

+0

Đúng.Nhưng, như bạn nói, tùy chọn -s là GNU cụ thể. Triển khai Vanilla sed dựa trên luồng. Đó là nó. –

6

Trong bản gốc (và vẫn là tốt nhất) cuốn sách, The AWK Programming Language, sau đây được thực hiện (trong số nhiều thứ khác):

  • một nhà lắp ráp đơn giản
  • đệ quy gốc biên dịch
  • một chỉ mục văn bản chương trình

Hãy thử làm điều đó với sed.

+1

Tôi nghĩ rằng đây là câu trả lời cho một câu hỏi hoàn toàn khác. Câu hỏi đặt ra là "Điều gì là không thể mà sed có thể không?", Không phải là "những gì có thể awk làm điều đó sed không thể". Chỉ cần nói rằng "awk là tốt hơn, mạnh mẽ hơn, nhanh hơn" không trả lời được câu hỏi nào cả. –

3

Điều duy nhất tôi có thể nghĩ là sed có thể thực hiện ít thay đổi trong số lượng char ít hơn. Vì vậy, để chỉnh sửa nhanh trên trình bao trực tiếp, bạn nên nhập nhanh hơn.

Các vấn đề liên quan