Website-Suche

So verwenden Sie Awk zum Drucken von Feldern und Spalten in einer Datei


In diesem Teil unserer Linux-Awk-Befehlsserie werfen wir einen Blick auf eine der wichtigsten Funktionen von Awk, nämlich die Feldbearbeitung.

Es ist gut zu wissen, dass Awk die bereitgestellten Eingabezeilen automatisch in Felder unterteilt und ein Feld als eine Reihe von Zeichen definiert werden kann, die durch ein internes Feldtrennzeichen von anderen Feldern getrennt sind.

Wenn Sie mit Unix/Linux vertraut sind oder Bash-Shell-Programmierung betreiben, sollten Sie wissen, was die interne Feldtrennvariable (IFS) ist. Die Standard-IFS in Awk sind Tab und Leerzeichen.

So funktioniert die Idee der Feldtrennung in Awk: Wenn es auf eine Eingabezeile trifft, ist der erste Zeichensatz gemäß dem definierten IFS Feld eins, auf das mit $1< zugegriffen wird, der zweite Zeichensatz ist Feld zwei, auf das mit $2 zugegriffen wird, der dritte Zeichensatz ist Feld drei, auf das mit $3 zugegriffen wird, und so weiter bis zum letzten Zeichensatz.

Um die Bearbeitung von Awk-Feldern besser zu verstehen, werfen wir einen Blick auf die folgenden Beispiele:

Beispiel 1: Ich habe eine Textdatei namens tecmintinfo.txt erstellt.

vi tecmintinfo.txt
cat tecmintinfo.txt

Dann versuche ich über die Befehlszeile, das erste, zweite und dritte Feld aus der Datei tecmintinfo.txt auszudrucken > mit dem folgenden Befehl:

$ awk '//{print $1 $2 $3 }' tecmintinfo.txt

TecMint.comisthe

Aus der obigen Ausgabe können Sie ersehen, dass die Zeichen aus den ersten drei Feldern basierend auf dem definierten IFS gedruckt werden, bei dem es sich um Leerzeichen handelt:

  1. Auf das erste Feld „TecMint.com“ wird mit $1 zugegriffen.
  2. Auf Feld zwei, nämlich „ist“, wird mit $2 zugegriffen.
  3. Auf Feld drei, nämlich „das“, wird mit $3 zugegriffen.

Wenn Sie in der gedruckten Ausgabe bemerkt haben, sind die Feldwerte nicht getrennt und der Druck verhält sich standardmäßig so.

Um die Ausgabe deutlich mit Leerzeichen zwischen den Feldwerten anzuzeigen, müssen Sie den Operator (,) wie folgt hinzufügen:

$ awk '//{print $1, $2, $3; }' tecmintinfo.txt

TecMint.com is the

Eine wichtige Sache, die Sie beachten und immer im Hinterkopf behalten sollten, ist, dass sich die Verwendung von ($) in Awk von der Verwendung in Shell-Skripten unterscheidet.

Unter Shell-Scripting wird ($) für den Zugriff auf den Wert von Variablen verwendet, während ($) in Awk nur für den Zugriff auf den Inhalt von verwendet wird ein Feld, aber nicht für den Zugriff auf den Wert von Variablen.

Beispiel 2: Schauen wir uns ein weiteres Beispiel an, bei dem eine Datei mit mehreren Zeilen namens my_shoping.list verwendet wird.

No	Item_Name		Unit_Price	Quantity	Price
1	Mouse			#20,000		   1		#20,000
2 	Monitor			#500,000	   1		#500,000
3	RAM_Chips		#150,000	   2		#300,000
4	Ethernet_Cables	        #30,000		   4		#120,000		

Angenommen, Sie möchten nur Unit_Price für jeden Artikel auf der Einkaufsliste drucken, müssen Sie den folgenden Befehl ausführen:

$ awk '//{print $2, $3 }' my_shopping.txt 

Item_Name Unit_Price
Mouse #20,000
Monitor #500,000
RAM_Chips #150,000
Ethernet_Cables #30,000

Awk hat auch einen printf-Befehl, der Ihnen hilft, Ihre Ausgabe zu formatieren. Dies ist eine nette Möglichkeit, da Sie sehen, dass die obige Ausgabe nicht klar genug ist.

Verwenden von printf zum Formatieren der Ausgabe von Item_Name und Unit_Price:

$ awk '//{printf "%-10s %s\n",$2, $3 }' my_shopping.txt 

Item_Name  Unit_Price
Mouse      #20,000
Monitor    #500,000
RAM_Chips  #150,000
Ethernet_Cables #30,000

Zusammenfassung

Die Feldbearbeitung ist sehr wichtig, wenn Sie Awk zum Filtern von Text oder Zeichenfolgen verwenden. Sie hilft Ihnen dabei, bestimmte Daten in Spalten einer Liste abzurufen. Und denken Sie immer daran, dass sich die Verwendung des ($)-Operators in Awk von der Verwendung in Shell-Skripten unterscheidet.

Ich hoffe, der Artikel war hilfreich für Sie. Wenn Sie weitere Informationen benötigen oder Fragen haben, können Sie im Kommentarbereich einen Kommentar hinterlassen.