Filtern Sie Felder mit Leerzeichen aus einer CSV-Datei in der Befehlszeile

Filtern Sie Felder mit Leerzeichen aus einer CSV-Datei in der Befehlszeile

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 grepwäre:

grep -E '^[^|]*\|[^|]*\| *[^| ]+ *\|' file

Antwort4

Mit Perl:

perl -F'\|' -lane 'print if $F[2] !~ /\S/' file

-aAktiviert 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).

verwandte Informationen