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.