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/
проверяет наличие символов, отличных от пробела (или пустых)