Um arquivo csv com vários registros é delimitado por |
.
field1|field2|field3|field4|field5
Quero verificar se o campo3 está em branco ou contém apenas caracteres de "espaço". Se estiver em branco ou com espaço, toda a linha deverá aparecer.
Responder1
$ 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}'
Responder2
Você também pode usar o comando cut para extrair o terceiro campo e testar o valor:
$ echo "field1|field2|field3|field4|field5" | cut -d '|' -f 3
field3
Responder3
Minha tentativa aleatória de usar grep
seria:
grep -E '^[^|]*\|[^|]*\| *[^| ]+ *\|' file
Responder4
Usando Perl:
perl -F'\|' -lane 'print if $F[2] !~ /\S/' file
-a
ativa o modo de divisão automática, que divide os campos em array @F
-F'\|'
define o delimitador de campo |
$F[2]
como o terceiro campo
!~ /\S/
testa caracteres sem espaço (ou vazios)