Filtrar campos com caracteres de espaço do arquivo csv na linha de comando

Filtrar campos com caracteres de espaço do arquivo csv na linha de comando

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 grepseria:

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

Responder4

Usando Perl:

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

-aativa 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)

informação relacionada