Unter der Annahme, dass die Datendatei ist tatsächlich mehrspaltigen, und dass die Werte in Spalte 4, wird folgende Arbeiten:
awk '$4 != "-" {print $4} {}'
Er druckt nur den Wert, bei dem es nicht „- ". Ihre Version wird wahrscheinlich den Wert unabhängig davon (oder zweimal) ausgeben, da die Standardaktion gedruckt werden soll. Hinzufügen der {}
macht die Standardaktion "nichts tun".
Wenn die Daten tatsächlich wie dargestellt (nur eine Spalte), sollten Sie $1
verwenden anstatt $4
- ich $0
nicht da, dass die ganze Linie ist verwenden würden, und es scheint, Sie Leerzeichen am Ende Ihrer ersten beiden haben Linien, die dazu führen würden, $0
"-1033 "
und "- "
zu sein.
Aber, wenn es sich um eine einzelne Säule wäre, würde ich awk nicht verwenden, sondern vielmehr:
grep -v '^-$'
grep -v '^ *- *$'
die zweite auf beiden Seiten des "-"
Zeichen für Räume ermöglicht.
Funktioniert für mich, mit GNU awk. Sind Sie sicher, dass Sie sich auf das richtige Feld beziehen? ($ 4) –
dachte das gleiche. sieht verdächtig –
ich denke awk '!/- /' könnte auch funktionieren. Ich lese es ist das gleiche wie awk '! ($ 0 ~ "-"), aber ich bin mir nicht ganz sicher. –