A csv file with multiple records is delimited by |.
field1|field2|field3|field4|field5 I want to check if field3 is blank or contains "space" characters only. If it is blank or space, the whole line should show up.
$ 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}' You can also use the cut command to pull out the third field and then test the value:
$ echo "field1|field2|field3|field4|field5" | cut -d '|' -f 3 field3 My random attempt using grep would be:
grep -E '^[^|]*\|[^|]*\| *[^| ]+ *\|' file I'm not certain about unix, but in linux you would want to use the sed command.
sed 's/||/\n/g' will make it so that if there are any blank fields it will add a new line. not certain how to get it to only check the 3rd field. sed 's/| |/\n/g' should work for only spaces.
Using Perl:
perl -F'\|' -lane 'print if $F[2] !~ /\S/' file
-a turns on autosplit mode, which splits the fields into array @F
-F'\|' sets the field delimiter to |
$F[2] is the 3rd field
!~ /\S/ tests for non-space characters (or empty)