awk-Aufteilungsparameter nach Zeichen

Die Datei lautet:

BASH.NIR SH.ABI 

Ich möchte das awk-Skript um zu zeigen:

User is NIR, SHELL is BASH User is ABI, SHELL is SH 

Ich weiß nicht, wie man einen Parameter nach Zeichen aufteilt. Die Idee ist:

cat file.txt | awk "{print "User is " afterDot($1) ", SHELL is " beforeDot($1)}" 

Antwort

Sie können die Zeichenfolgenfunktionen in awk verwenden.

$ (echo BASH.NIR; echo SH.ABI FOOBAR) | awk "{p=index($1,".");print "User is", substr($1,p+1) ", SHELL IS", substr($1,0,p-1)}" User is NIR, SHELL IS BASH User is ABI, SHELL IS SH 

Die Funktion index gibt die Position des zu findenden Zeichens zurück (in diesem Fall einen Punkt). Und strstr gibt einen Teilstring zurück. Wir verwenden p+1 und p-1, um den Punkt nicht einzuschließen.

Weitere Informationen finden Sie im Abschnitt „Zeichenfolgenfunktionen“ der awk Manpage.

Antwort

Sie können einfach . als Feldtrennzeichen verwenden:

awk -F. "{ print "User is " $2 ", SHELL is " $1 }" file.txt 

Kommentare

  • Die Textdatei kann a lso have whitespaces
  • @nir Bitte fügen Sie ein Beispiel Ihrer genauen Eingabe in Ihre Frage ein. Ich kann ' nicht erraten, wie es aussieht wie, es sei denn, Sie stellen es richtig dar.
  • @nir – ' Es ist immer am besten, echte Beispieldaten einzuschließen. Erfundene Daten verschwenden normalerweise nur die Zeit der Antwort ', da dies im Allgemeinen zu falschen Lösungen führt.
  • Sie haben Recht, werden sich beim nächsten Mal bilden.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.