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.