Eine CSV-Datei mit mehreren Datensätzen wird durch getrennt |
.
field1|field2|field3|field4|field5
Ich möchte prüfen, ob Feld 3 leer ist oder nur Leerzeichen enthält. Wenn es leer ist oder Leerzeichen enthält, sollte die ganze Zeile angezeigt werden.
Antwort1
$ echo "1|2||4" | awk -F'|' '$3 ~ /^[ \t]*$/ {print $0}'
1|2||4
$ echo "1|2| |4" | awk -F'|' '$3 ~ /^[ \t]*$/ {print $0}'
1|2| |4
$ echo "1|2| 3|4" | awk -F'|' '$3 ~ /^[ \t]*$/ {print $0}'
Antwort2
Sie können auch den Befehl „cut“ verwenden, um das dritte Feld herauszuziehen und dann den Wert zu testen:
$ echo "field1|field2|field3|field4|field5" | cut -d '|' -f 3
field3
Antwort3
Mein zufälliger Versuch grep
wäre:
grep -E '^[^|]*\|[^|]*\| *[^| ]+ *\|' file
Antwort4
Mit Perl:
perl -F'\|' -lane 'print if $F[2] !~ /\S/' file
-a
Aktiviert den Autosplit-Modus, der die Felder in Arrays aufteilt. Setzt @F
-F'\|'
das Feldtrennzeichen auf |
$F[2]
das 3. Feld.
!~ /\S/
Prüft auf Zeichen, die keine Leerzeichen sind (oder leer sind).