2016-07-12 9 views
0

ich überraschenderweise festgestellt, dass, wenn Sie dies tun:AWK: Filter anwenden, nur wenn Feldtrenn vorhanden ist

echo „Hallo“ | awk -F '|' '{Print $ 1;}'

Sie erhalten:

hallo

Wie nichts gegeben zurück, dass das Feldtrennzeichen '|' fehlt in der Zeile?

Ich mache dies, um Daten am Anfang von Protokollzeilen zu extrahieren, aber einige Zeilen beginnen nicht mit einem Datum und geben mir dann dieses Problem. Danke, ich bin ziemlich neu in awk.

+0

Dies ist ein Beispiel für [Das XY-Problem] (http://xyproblem.info/). Bearbeiten Sie Ihre Frage so, dass sie einen übersichtlichen, testbaren Beispieleintrag und die erwartete Ausgabe enthält, damit wir Ihnen helfen können. –

Antwort

1

Sie können tun, um diese

echo "hello" | awk -F'|' 'NF>1 {print $1}' 

echo "hello|1" | awk -F'|' 'NF>1 {print $1}' 
hello 

Nur wenn Sie mehr als ein Feld haben, senden Sie das erste Feld

Auf einer Datei

cat testing 
record1|val1 
record2|val2 
record3 
record4|val4 

awk -F'|' 'NF>1 {print $1}' testing 
record1 
record2 
record4 
+0

Ja das ist was ich wollte, danke! –

1

Alternativ können Sie verwenden

awk -F'|' '$1==$0' 

Wenn kein Trennzeichen vorhanden ist, enthält Feld eins die gesamte Zeile.

Verwandte Themen