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

CSV-файл с несколькими записями ограничен |,

field1|field2|field3|field4|field5

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

5 ответов

Решение
$ 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}'

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

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

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

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

Я не уверен насчет Unix, но в Linux вы бы хотели использовать команду Sed.

sed 's / || / \ n / g' сделает так, чтобы при наличии пустых полей была добавлена ​​новая строка. не уверен, как заставить его проверять только 3-е поле. sed 's/| |/\n/g'должен работать только для пробелов.

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

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

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

Другие вопросы по тегам