AWK - Chuyển hướng đầu ra

Cho đến nay, chúng tôi đã hiển thị dữ liệu trên luồng đầu ra tiêu chuẩn. Chúng tôi cũng có thể chuyển hướng dữ liệu đến một tệp. Chuyển hướng xuất hiện sauprint hoặc là printftuyên bố. Chuyển hướng trong AWK được viết giống như chuyển hướng trong các lệnh shell, ngoại trừ việc chúng được viết bên trong chương trình AWK. Chương này giải thích chuyển hướng với các ví dụ phù hợp.

Nhà điều hành chuyển hướng

Cú pháp của toán tử chuyển hướng là:

Cú pháp

print DATA > output-file

Nó ghi dữ liệu vào output-file. Nếu tệp đầu ra không tồn tại, thì nó sẽ tạo một tệp. Khi loại chuyển hướng này được sử dụng, tệp đầu ra sẽ bị xóa trước khi đầu ra đầu tiên được ghi vào nó. Các thao tác ghi tiếp theo vào cùng một tệp đầu ra không xóa tệp đầu ra, nhưng nối vào tệp đó. Ví dụ, ví dụ sau viếtHello, World !!! vào tệp.

Hãy để chúng tôi tạo một tệp với một số dữ liệu văn bản.

Thí dụ

[jerry]$ echo "Old data" > /tmp/message.txt
[jerry]$ cat /tmp/message.txt

Khi thực thi mã này, bạn nhận được kết quả sau:

Đầu ra

Old data

Bây giờ chúng ta hãy chuyển hướng một số nội dung vào nó bằng cách sử dụng toán tử chuyển hướng của AWK.

Thí dụ

[jerry]$ awk 'BEGIN { print "Hello, World !!!" > "/tmp/message.txt" }'
[jerry]$ cat /tmp/message.txt

Khi thực thi mã này, bạn nhận được kết quả sau:

Đầu ra

Hello, World !!!

Người điều hành nối

Cú pháp của toán tử append như sau:

Cú pháp

print DATA >> output-file

Nó gắn dữ liệu vào output-file. Nếu tệp đầu ra không tồn tại, thì nó sẽ tạo một tệp. Khi loại chuyển hướng này được sử dụng, nội dung mới sẽ được thêm vào cuối tệp. Ví dụ: ví dụ sau đây thêm vàoHello, World !!! vào tệp.

Hãy để chúng tôi tạo một tệp với một số dữ liệu văn bản.

Thí dụ

[jerry]$ echo "Old data" > /tmp/message.txt 
[jerry]$ cat /tmp/message.txt

Khi thực thi mã này, bạn nhận được kết quả sau:

Đầu ra

Old data

Bây giờ chúng ta hãy thêm một số nội dung vào nó bằng cách sử dụng toán tử chắp thêm của AWK.

Thí dụ

[jerry]$ awk 'BEGIN { print "Hello, World !!!" >> "/tmp/message.txt" }'
[jerry]$ cat /tmp/message.txt

Khi thực thi mã này, bạn nhận được kết quả sau:

Đầu ra

Old data
Hello, World !!!

Ống

Có thể gửi đầu ra cho chương trình khác thông qua đường ống thay vì sử dụng tệp. Việc chuyển hướng này sẽ mở ra một đường dẫn để ra lệnh và ghi giá trị của các mục qua đường dẫn này vào một quá trình khác để thực hiện lệnh. Lệnh đối số chuyển hướng thực sự là một biểu thức AWK. Đây là cú pháp của pipe -

Cú pháp

print items | command

Hãy để chúng tôi sử dụng tr lệnh chuyển chữ thường thành chữ hoa.

Thí dụ

[jerry]$ awk 'BEGIN { print "hello, world !!!" | "tr [a-z] [A-Z]" }'

Khi thực thi mã này, bạn nhận được kết quả sau:

Đầu ra

HELLO, WORLD !!!

Giao tiếp hai chiều

AWK có thể giao tiếp với một quy trình bên ngoài bằng cách sử dụng |&, đó là giao tiếp hai chiều. Ví dụ, ví dụ sau sử dụngtrlệnh chuyển chữ thường thành chữ hoa. Của chúng tôicommand.awk tệp chứa -

Thí dụ

BEGIN {
   cmd = "tr [a-z] [A-Z]"
   print "hello, world !!!" |& cmd
   close(cmd, "to")
   
   cmd |& getline out
   print out;
   close(cmd);
}

Khi thực thi mã này, bạn nhận được kết quả sau:

Đầu ra

HELLO, WORLD !!!

Kịch bản có khó hiểu không? Hãy để chúng tôi làm sáng tỏ nó.

  • Tuyên bố đầu tiên, cmd = "tr [a-z] [A-Z]", là lệnh mà chúng tôi thiết lập giao tiếp hai chiều từ AWK.

  • Câu lệnh tiếp theo, tức là, lệnh in cung cấp đầu vào cho trchỉ huy. Đây&| biểu thị giao tiếp hai chiều.

  • Câu lệnh thứ ba, tức là, close(cmd, "to"), đóng to quy trình sau khi cạnh tranh việc thực hiện của nó.

  • Tuyên bố tiếp theo cmd |& getline out lưu trữ output thành biến out với sự hỗ trợ của hàm getline.

  • Câu lệnh in tiếp theo in đầu ra và cuối cùng là close hàm đóng lệnh.