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.