循环文件以计算字段编号

Cyr*_*l F 2 awk

我有一个脚本bash来从.txt文件添加用户.这很简单:

name firstname uid gid
Run Code Online (Sandbox Code Playgroud)

空间分隔值

我想用awk检查每行是否包含4个字段.如果是,我想返回1,如果不返回0.

file=/my/file.txt
awk=$(awk -F' ' '{(NF != 4) ? res = 0 : res = 1; print res)}' $file)
echo $awk
Run Code Online (Sandbox Code Playgroud)

现在,awk每行返回1,但我希望它在结尾返回1或0,而不是文件中的每一行.

hek*_*mgl 6

在UNIX上0,如果成功并且!=0出现错误,您将返回.对我来说,0当所有记录都有4字段并且1并非所有记录都有4个字段时返回更有意义.

要实现这一目标,请使用exit:

awk 'NF!=4{exit 1}' file
Run Code Online (Sandbox Code Playgroud)

仅供参考:默认情况下awk将退出0.

如果要在shell条件中使用它:

#!/bin/bash
if ! awk 'NF!=4{exit 1}' file ; then
    echo "file is invalid"
fi
Run Code Online (Sandbox Code Playgroud)

PS:-F' '在你的例子中是多余的,因为' '它是默认的字段分隔符.