AWK - Przekierowanie wyjścia

Do tej pory wyświetlaliśmy dane na standardowym strumieniu wyjściowym. Możemy również przekierować dane do pliku. Przekierowanie pojawia się poprint lub printfkomunikat. Przekierowania w AWK są pisane tak samo, jak przekierowania w poleceniach powłoki, z wyjątkiem tego, że są napisane wewnątrz programu AWK. W tym rozdziale wyjaśniono przekierowanie z odpowiednimi przykładami.

Operator przekierowania

Składnia operatora przekierowania to -

Składnia

print DATA > output-file

Zapisuje dane w output-file. Jeśli plik-wyjściowy nie istnieje, tworzy go. Gdy używany jest ten typ przekierowania, plik wyjściowy jest kasowany przed zapisaniem do niego pierwszego wyjścia. Kolejne operacje zapisu do tego samego pliku wyjściowego nie usuwają pliku wyjściowego, ale dołączają do niego. Na przykład poniższy przykład piszeHello, World !!! do pliku.

Utwórzmy plik z danymi tekstowymi.

Przykład

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

Wykonując ten kod, otrzymasz następujący wynik -

Wynik

Old data

Teraz przekierujmy do niego część zawartości za pomocą operatora przekierowania AWK.

Przykład

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

Wykonując ten kod, otrzymasz następujący wynik -

Wynik

Hello, World !!!

Dołącz operator

Składnia operatora dołączania jest następująca -

Składnia

print DATA >> output-file

Dołącza dane do pliku output-file. Jeśli plik-wyjściowy nie istnieje, tworzy go. W przypadku korzystania z tego typu przekierowania nowa zawartość jest dodawana na końcu pliku. Na przykład następujący przykład dołączaHello, World !!! do pliku.

Utwórzmy plik z danymi tekstowymi.

Przykład

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

Wykonując ten kod, otrzymasz następujący wynik -

Wynik

Old data

Teraz dołączmy do niego trochę treści za pomocą operatora append AWK.

Przykład

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

Wykonując ten kod, otrzymasz następujący wynik -

Wynik

Old data
Hello, World !!!

Rura

Możliwe jest wysłanie wyjścia do innego programu przez potok zamiast korzystania z pliku. To przekierowanie otwiera potok do polecenia i zapisuje wartości elementów przez ten potok do innego procesu w celu wykonania polecenia. Polecenie argumentu przekierowania jest w rzeczywistości wyrażeniem AWK. Oto składnia potoku -

Składnia

print items | command

Użyjmy tr polecenie do konwersji małych liter na wielkie.

Przykład

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

Wykonując ten kod, otrzymasz następujący wynik -

Wynik

HELLO, WORLD !!!

Dwukierunkowa komunikacja

AWK może komunikować się z procesem zewnętrznym za pomocą |&, czyli komunikacja dwukierunkowa. Na przykład w poniższym przykładzie użytotrpolecenie do konwersji małych liter na wielkie. Naszcommand.awk plik zawiera -

Przykład

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

Wykonując ten kod, otrzymasz następujący wynik -

Wynik

HELLO, WORLD !!!

Czy skrypt wygląda tajemniczo? Zdejmijmy to.

  • Pierwsze stwierdzenie, cmd = "tr [a-z] [A-Z]", to polecenie, do którego nawiązujemy dwukierunkową komunikację z AWK.

  • Następna instrukcja, tj. Polecenie print zapewnia dane wejściowe do trKomenda. Tutaj&| oznacza komunikację dwukierunkową.

  • Trzecie stwierdzenie, tj. close(cmd, "to"), zamyka to proces po jego wykonaniu.

  • Następna wypowiedź cmd |& getline out przechowuje output do zmiennej out za pomocą funkcji getline.

  • Następna instrukcja print drukuje dane wyjściowe, a na końcu close funkcja zamyka polecenie.