I have a script bash to add users from a .txt file. It is really simple:
name firstname uid gid
space separated values
I want to check
On UNIX you'll return 0
in case of success and !=0
in case of an error. For me it makes more sense to return 0
when all records have 4
fields and 1
when not all records have 4 fields.
To achieve that, use exit:
awk 'NF!=4{exit 1}' file
FYI: awk
will exit with 0
by default.
If you want to use it in a shell conditional:
#!/bin/bash
if ! awk 'NF!=4{exit 1}' file ; then
echo "file is invalid"
fi
PS: -F' '
in your example is superfluous because ' '
is the default field delimiter.
Subtle changes to your script would do
result=$(awk -F' ' 'BEGIN{flag=1}NF!=4{flag=0;exit}END{print flag}' "$file")
[ ${result:-0} -eq 0 ] && echo "Problematic entries found in file"
The approach
exit
would skip the rest of the input and go to the END
rule.You can use:
awk 'res = NF!=4{exit} END{exit !res}' file
This will exit with 1
if all rows have 4 columns otherwise it will exist with 0