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.