Filtrar campos con carácter de espacio del archivo csv en la línea de comando

Filtrar campos con carácter de espacio del archivo csv en la línea de comando

Un archivo csv con varios registros está delimitado por |.

field1|field2|field3|field4|field5

Quiero comprobar si el campo3 está en blanco o contiene sólo caracteres de "espacio". Si está en blanco o con espacio, debería aparecer toda la línea.

Respuesta1

$ 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}'

Respuesta2

También puede usar el comando cortar para extraer el tercer campo y luego probar el valor:

$ echo "field1|field2|field3|field4|field5" | cut -d '|' -f 3
field3

Respuesta3

Mi intento aleatorio de usar grepsería:

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

Respuesta4

Usando Perl:

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

-aactiva el modo de división automática, que divide los campos en una matriz @F
-F'\|'establece el delimitador de campo en |
$F[2]el tercer campo
!~ /\S/prueba si hay caracteres que no sean espacios (o estén vacíos)

información relacionada