AWK - Ausgangsumleitung
Bisher haben wir Daten zum Standardausgabestream angezeigt. Wir können Daten auch in eine Datei umleiten. Nach dem wird eine Umleitung angezeigtprint oder printfErklärung. Umleitungen in AWK werden genauso wie Umleitungen in Shell-Befehlen geschrieben, außer dass sie im AWK-Programm geschrieben werden. In diesem Kapitel wird die Umleitung anhand geeigneter Beispiele erläutert.
Umleitungsoperator
Die Syntax des Umleitungsoperators lautet -
Syntax
print DATA > output-file
Es schreibt die Daten in die output-file. Wenn die Ausgabedatei nicht vorhanden ist, wird eine erstellt. Wenn diese Art der Umleitung verwendet wird, wird die Ausgabedatei gelöscht, bevor die erste Ausgabe in sie geschrieben wird. Nachfolgende Schreibvorgänge in dieselbe Ausgabedatei löschen die Ausgabedatei nicht, sondern hängen sie an. Das folgende Beispiel schreibt beispielsweiseHello, World !!! in die Datei.
Lassen Sie uns eine Datei mit einigen Textdaten erstellen.
Beispiel
[jerry]$ echo "Old data" > /tmp/message.txt
[jerry]$ cat /tmp/message.txt
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Ausgabe
Old data
Lassen Sie uns nun einige Inhalte mit dem Umleitungsoperator von AWK umleiten.
Beispiel
[jerry]$ awk 'BEGIN { print "Hello, World !!!" > "/tmp/message.txt" }'
[jerry]$ cat /tmp/message.txt
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Ausgabe
Hello, World !!!
Operator anhängen
Die Syntax des Append-Operators lautet wie folgt:
Syntax
print DATA >> output-file
Es fügt die Daten in die output-file. Wenn die Ausgabedatei nicht vorhanden ist, wird eine erstellt. Wenn diese Art der Umleitung verwendet wird, werden neue Inhalte am Ende der Datei angehängt. Das folgende Beispiel wird beispielsweise angehängtHello, World !!! in die Datei.
Lassen Sie uns eine Datei mit einigen Textdaten erstellen.
Beispiel
[jerry]$ echo "Old data" > /tmp/message.txt
[jerry]$ cat /tmp/message.txt
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Ausgabe
Old data
Lassen Sie uns nun einige Inhalte mit dem Append-Operator von AWK anhängen.
Beispiel
[jerry]$ awk 'BEGIN { print "Hello, World !!!" >> "/tmp/message.txt" }'
[jerry]$ cat /tmp/message.txt
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Ausgabe
Old data
Hello, World !!!
Rohr
Es ist möglich, eine Ausgabe über eine Pipe an ein anderes Programm zu senden, anstatt eine Datei zu verwenden. Diese Umleitung öffnet eine Pipe zum Befehl und schreibt die Werte von Elementen durch diese Pipe in einen anderen Prozess, um den Befehl auszuführen. Der Befehl redirection argument ist eigentlich ein AWK-Ausdruck. Hier ist die Syntax von Pipe -
Syntax
print items | command
Lass uns benutzen tr Befehl zum Konvertieren von Kleinbuchstaben in Großbuchstaben.
Beispiel
[jerry]$ awk 'BEGIN { print "hello, world !!!" | "tr [a-z] [A-Z]" }'
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Ausgabe
HELLO, WORLD !!!
Zwei-Wege-Kommunikation
AWK kann mit einem externen Prozess kommunizieren |&, was wechselseitige Kommunikation ist. Im folgenden Beispiel wird beispielsweise verwendettrBefehl zum Konvertieren von Kleinbuchstaben in Großbuchstaben. Unsercommand.awk Datei enthält -
Beispiel
BEGIN {
cmd = "tr [a-z] [A-Z]"
print "hello, world !!!" |& cmd
close(cmd, "to")
cmd |& getline out
print out;
close(cmd);
}
Wenn Sie diesen Code ausführen, erhalten Sie das folgende Ergebnis:
Ausgabe
HELLO, WORLD !!!
Sieht das Skript kryptisch aus? Lasst es uns entmystifizieren.
Die erste Aussage, cmd = "tr [a-z] [A-Z]"ist der Befehl, mit dem wir die bidirektionale Kommunikation von AWK herstellen.
Die nächste Anweisung, dh der Druckbefehl, liefert Eingaben für die trBefehl. Hier&| zeigt bidirektionale Kommunikation an.
Die dritte Aussage, dh close(cmd, "to")schließt die to Prozess nach dem Wettbewerb seiner Ausführung.
Die nächste Aussage cmd |& getline out speichert die output in out Variable mit Hilfe der getline Funktion.
Die nächste print-Anweisung druckt die Ausgabe und schließlich die close Funktion schließt den Befehl.