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 grep
sería:
grep -E '^[^|]*\|[^|]*\| *[^| ]+ *\|' file
Respuesta4
Usando Perl:
perl -F'\|' -lane 'print if $F[2] !~ /\S/' file
-a
activa 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)