Der entscheidende Punkt hier ist, dass das Pipe-Zeichen (|
) in die Shell maskiert werden muss. Verwenden Sie "\|
" oder "'|'
", um es vor Shell-Interpertation zu schützen, und lassen Sie es in der Befehlszeile an awk
übergeben.
die Kommentare lesen Ich sehe, dass das ursprüngliche Plakat, das eine vereinfachte Version des ursprünglichen Problems stellt die Filterung beteiligt file
vor der Auswahl und die Felder zu drucken. Ein Durchlauf durch grep
wurde verwendet und das Ergebnis piped in awk für die Feldauswahl. Das erklärt die völlig unnötige cat file
, die in der Frage erscheint (es ersetzt die grep <pattern> file
).
Gut, das wird funktionieren. Awk ist jedoch größtenteils selbst ein Mustervergleichswerkzeug und kann vertraut sein, um die übereinstimmenden Zeilen zu finden und zu bearbeiten, ohne dass grep
aufgerufen werden muss. Verwenden Sie so etwas wie:
awk -F\| '/<pattern>/{print $2;}{next;}' file
Das /<pattern>/
Bit teilt awk
die Aktion durchzuführen, die auf den Linien folgt, die <pattern>
entsprechen.
Die verloren aussehende {next;}
ist eine Standardaktion, die auf die nächste Zeile in der Eingabe springt. Es scheint nicht notwendig zu sein, aber ich habe diese Gewohnheit von vor langer Zeit ...
Beachten Sie, dass der Kern des Problems ist die Pipe-Zeichen, nicht den Befehl verwendet. Aber das ist eine feine Lösung. –
Ich dachte darüber nach, aber ich hätte lieber eine Antwort, die das Problem erklärt. Das ist eigentlich der Punkt meines Kommentars. ;-) –
Würde 'cut -d '|' -f FIELDNUMBER DATEINAME – Andrea