Фильтрация полей с символом пробела из CSV-файла в командной строке

Фильтрация полей с символом пробела из CSV-файла в командной строке

CSV-файл с несколькими записями разделяется с помощью |.

field1|field2|field3|field4|field5

Я хочу проверить, является ли поле field3 пустым или содержит только символы "пробел". Если оно пустое или пробел, то должна отображаться вся строка.

решение1

$ 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}'

решение2

Вы также можете использовать команду cut, чтобы извлечь третье поле, а затем проверить значение:

$ echo "field1|field2|field3|field4|field5" | cut -d '|' -f 3
field3

решение3

Моя случайная попытка использования grepбудет такой:

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

решение4

Использование Perl:

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

-aвключает режим авторазбиения, который разбивает поля на массив, @F
-F'\|'устанавливает разделитель полей на |
$F[2]3-е поле,
!~ /\S/проверяет наличие символов, отличных от пробела (или пустых)

Связанный контент