$ 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}'
Um arquivo csv com vários registros é delimitado por |
.
field1|field2|field3|field4|field5
Eu quero verificar se o campo3 está em branco ou contém apenas caracteres "espaço". Se estiver em branco ou espaço, a linha inteira deve aparecer.
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
Minha tentativa aleatória usando grep
seria:
grep -E '^[^|]*\|[^|]*\| *[^| ]+ *\|' file
Não tenho certeza sobre o unix, mas no linux você gostaria de usar o comando sed.
sed / || / \ n / g 'fará com que, se houver algum campo em branco, ele adicione uma nova linha. Não tenho certeza de como obtê-lo para verificar apenas o terceiro campo. sed 's / | | / \ n / g 'deve funcionar apenas para espaços.
Usando o Perl:
perl -F'\|' -lane 'print if $F[2] !~ /\S/' file
-a
ativa o modo de preenchimento automático, que divide os campos no array @F
-F'\|'
define o delimitador de campo como |
e $F[2]
é o terceiro campo
!~ /\S/
testes para caracteres não espaciais (ou vazios)