Benutzer-Werkzeuge

Webseiten-Werkzeuge


awk

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
awk [2017/10/17 23:06]
root [Variablen]
awk [2017/10/19 21:33] (aktuell)
root [Built-In]
Zeile 108: Zeile 108:
 Es gibt 3 Arten von Variablen. Es gibt 3 Arten von Variablen.
  
-**Fields**+===== Fields =====
  
   * enthalten den Inhalt von Feldern   * enthalten den Inhalt von Feldern
Zeile 115: Zeile 115:
     * $0 enthält den gesamten Record/Zeile     * $0 enthält den gesamten Record/Zeile
  
-**Built-In**+===== Built-In ===== 
   * Variablen deren Inhalt das Verhalten von awk bestimmen oder die Sjantatusinformationen enthalten   * Variablen deren Inhalt das Verhalten von awk bestimmen oder die Sjantatusinformationen enthalten
       * haben normale Namen (ohne irgend etwas davor)       * haben normale Namen (ohne irgend etwas davor)
Zeile 145: Zeile 145:
 </code> </code>
 In diesem Fall ist der Feldtrenner das Zeichen "-". In diesem Fall ist der Feldtrenner das Zeichen "-".
-\\ \\+\\ \\ \\
 <code> <code>
 FS=");" FS=");"
Zeile 160: Zeile 160:
 </code> </code>
 würden nicht zerlegt werden.\\ \\ würden nicht zerlegt werden.\\ \\
-Es muss immer die gesamte Zeichenkette zu finden sein die als Feldtrenner angegeben wurde. \\ \\+Es muss immer die gesamte Zeichenkette zu finden sein die als Feldtrenner angegeben wurde. \\ \\ \\ 
 +<code> 
 +FS="-[0-9]{1,2}" 
 +</code> 
 +In diesem Fall ist der Feldtrenner das Zeichen "-" + eine Zahl im Bereich 0-9 die mindestens einmal aufauchen muss, maximal 2 mal auftauchen darf - es handelt sich hier um einen regulären Ausdruck. \\ 
 +Das bedeutet:
  
 +  * "abc-def" würde nicht zerlegt, weil "-" alleine kein gültiger Feldtrenner ist
 +  * "abc-1def" würde zerlegt in die Felder "abc" und "def" -> auf "-1" passt der reguläre Ausdruck im Feldtrenner
 +  * "abc-19def" würde zerlegt in die Felder "abc" und "def" -> auf "-1" passt der reguläre Ausdruck im Feldtrenner
 +\\ \\
 +<code>
 +-F "-|:"
 +</code>
 +In diesem Fall ist entweder "-" oder ":" der Feldtrenner.
 +\\ 
 +Das bedeutet:
 +  * "abc:def" -> würde zerlegt in "abc" und "def"
 +  * "abc-def" -> würde zerlegt in "abc" und "def"
 +  * "abc:-def" -> würde zerlegt in "abc", "" und "def" - das "" kommt daher, da zwischen dem Feldtrenner ":" und "-" keine Zeichen sind, es ensteht ein leeres Feld
 +
 +</WRAP>|
 +|RS|Record Separator - Definiert das Trennzeichen bzw. den Regular Expression zum Trennen der Records/Zeilen. \\ \\ awk ließt einen Zeichenstrom (zum Beispiel eine Datei) sequentiell bis es auf den RS (Record Separator) stößt ein. Wird der RS gefunden, wird alles bisher (bzw. zwischen dem aktuellen RS und dem davor) in der Variable $0 gespeichert, anschließend wird die Zeichenkette anhand des FS in Felder zerlegt und das awk-Script auf den Record/Zeile in $0 angewendet. \\ Der RS ist bei Default Newline (\n), womit bei default eine Zeile in einem Texteditor einem Record in awk entspricht. \\ \\ <WRAP>
 +<code>
 +Eingabestring: Dies ist ein Satz. Dies ist der nächste. Dies der danach.
 +Script: awk 'BEGIN{RS="."} {print $0}'
 +Ausgabe: 
 +Dies ist ein Satz
 +Dies ist der nächste
 +Dies der danach
 +</code>
 +In obigem Beispiel enthält $0 den aktuellen Record, da "." der Recordseperator ist, landed immer ein Satz in $0, danach wird das awk-Script für den aktuellen Record (in diesem Fall also für je einen Satz) ausgeführt -> in diesem Fall die Ausgabe des aktuellen Satzes. \\
 +<code>
 +Eingabestring: Dies ist ein Satz. Dies ist der nächste. Dies der danach.
 +Script: awk 'BEGIN{RS="."} {print $2}'
 +Ausgabe: 
 +ist
 +ist
 +der
 +</code>
 +Obiges Beispiel ließt je einen Satz ein (da ein Record jeweils durch "." getrennt wird) und gibt das 2 Feld in jedem der eingelesenen Records aus. \\ \\
 +Im Prinziep trifft alles (die definierbaren regular Expressions usw.) vom Field Seperator auch auf den Recordseperator zu.
 </WRAP>| </WRAP>|
-|RS|Record Separator - Definiert das Trennzeichen bzw. den Regular Expression zum Trennen der Records/Zeilen| +|OFS|Output Field Seperator - Definiert das Trennzeichen |
-|OFS|Output Field Seperator - Definiert das Trennzeichen +
 |ORS|Output Record Seperator - Definiert wie Records bei der Ausgabe getrennt werden. \\ \\ Per Default durch New Line (\n).  \\ \\ Bei der Ausgabe ist ein Record ein print-Statement und alles was dies ausgibt. Gibt es mehrere Ausgaben durch print, startet jedes print-Statement einen neue Zeile/Record - auch wenn sie das Ergebnis der gleichen Eingabezeile/Eingaberecord sind. <WRAP> |ORS|Output Record Seperator - Definiert wie Records bei der Ausgabe getrennt werden. \\ \\ Per Default durch New Line (\n).  \\ \\ Bei der Ausgabe ist ein Record ein print-Statement und alles was dies ausgibt. Gibt es mehrere Ausgaben durch print, startet jedes print-Statement einen neue Zeile/Record - auch wenn sie das Ergebnis der gleichen Eingabezeile/Eingaberecord sind. <WRAP>
 <code> <code>
awk.1508274385.txt.gz · Zuletzt geändert: 2017/10/17 23:06 von root