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

2

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.

    
por Michael Ellick Ang 08.07.2009 / 23:48

5 respostas

10
$ 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}'
    
por 09.07.2009 / 00:04
3

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
    
por 09.07.2009 / 01:11
1

Minha tentativa aleatória usando grep seria:

grep -E '^[^|]*\|[^|]*\| *[^| ]+ *\|' file
    
por 09.07.2009 / 01:21
0

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.

    
por 08.07.2009 / 23:57
0

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)

    
por 03.12.2015 / 02:23