我有一个脚本bash来从.txt文件添加用户。 这很简单:
name firstname uid gid
空格分隔值
我想用awk检查每行是否包含4个字段。如果是,我想返回1,如果不返回0。
file=/my/file.txt
awk=$(awk -F' ' '{(NF != 4) ? res = 0 : res = 1; print res)}' $file)
echo $awk
现在,awk每行返回1,但我希望它最后返回1或0,而不是文件中的每一行。
答案 0 :(得分:6)
在UNIX上,如果成功,您将返回0
,如果出现错误,则返回!=0
。对我来说,当所有记录都包含0
字段时返回4
更有意义,而当所有记录都有4个字段时返回1
更为合理。
要实现这一目标,请使用exit
:
awk 'NF!=4{exit 1}' file
仅供参考:awk
默认会以0
退出。
如果你想在shell条件中使用它:
#!/bin/bash
if ! awk 'NF!=4{exit 1}' file ; then
echo "file is invalid"
fi
PS:您的示例中的-F' '
是多余的,因为' '
是default field delimiter。
答案 1 :(得分:3)
您可以使用:
awk 'res = NF!=4{exit} END{exit !res}' file
如果所有行都有4列,则会以1
退出,否则它将与0
答案 2 :(得分:0)
对脚本进行细微更改
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"
方法
exit
将跳过其余输入并转到END
规则。