
Ich habe versucht herauszufinden, wie man herausfindet, wie viele Werte in einer Spalte nicht vorhanden sind, d. h. nur ein "." enthalten.
Zum Beispiel
auto.txt
Car Colour mpg Year
vw_golf blue 56 2006
vw_polo red 66 2010
honda_civic white . 2007
ford_ka red . 2014
Ich interessiere mich also für den Honda Civic und den Ford Ka, da bei ihnen keine Zahl für die MPG-Spalte vorhanden ist und ich herausfinden möchte, wie viele Werte in der MPG-Spalte keinen Wert haben (in diesem Fall 2).
Mein Problem besteht darin, dass bei Verwendung des Awk-Befehls der Punkt Fehler zu verursachen scheint.
Antwort1
Kurzgrep
Ansatz:
grep -Ec '^\S+\s+\S+\s+\.\s+' file
2
-E
- erweiterte reguläre Ausdrücke zulassen-c
- Drucken Sie eine Anzahl übereinstimmender Zeilen\S+
- passt zu Zeichen, die kein Leerzeichen sind. Es handelt sich um ein Synonym für[^[:space:]]
\s+
- Leerzeichen entsprechen, es ist ein Synonym für[[:space:]]
Antwort2
Eine andere grep
Methode, wenn Ihre Datei streng so formatiert ist, dass das MPG in Spalte 28 beginnt:
$ grep '...........................\.' input
honda_civic white . 2007
ford_ka red . 2014
$ grep -c '...........................\.' input
2
Das sind 28 Punkte (für „beliebiges“ Zeichen), gefolgt von einem Escape-Punkt („einem Punkt“).
Oder mit awk
,als erwähntin den Kommentaren:
$ awk '$3 == "."' input
honda_civic white . 2007
ford_ka red . 2014
$ awk '$3 == "."' input | wc -l
2