Ste*_*ski 20 awk shell-script text-processing
这是我之前的问题的后续。
我正在使用这个方便的代码段验证 /etc/passwd 中的字段数。在以下示例中,用户“fieldcount1”和“fieldcount2”的字段数错误:
$ awk -F: ' NF!=7 {print}' /etc/passwd
fieldcount1:x:1000:100:fieldcount1:/home/fieldcount1:/bin/bash::::
fieldcount2:blah::blah:1002:100:fieldcount2:/home/fieldcount2:/bin/bash:
$ echo $?
0
Run Code Online (Sandbox Code Playgroud)
您会注意到,awk 将退出,返回状态为 0。从它的角度来看,这里没有问题。
我想将此 awk 语句合并到一个 shell 脚本中。我想打印所有错误的行,并将返回码设置为 1(错误)。
我可以尝试强制特定的退出状态,但是 awk 只打印一行:
$ awk -F: ' NF!=7 {print ; exit 1}' /etc/passwd
fieldcount1:x:1000:100:fieldcount1:/home/fieldcount1:/bin/bash::::
$ echo $?
1
Run Code Online (Sandbox Code Playgroud)
我可以强制 awk 以“1”的返回状态退出,并打印所有匹配的行吗?
gee*_*aur 26
将状态保存在变量中并在END
块中使用它。
awk -F: 'NF != 7 {print; err = 1}
END {exit err}' /etc/passwd
Run Code Online (Sandbox Code Playgroud)
我正在寻找类似于 Grep 的东西,如果找不到匹配项,它将退出 1。这是与 awk 等效的:
#!/usr/bin/awk -f
BEGIN {
b1 = 1
}
index($0, "sunday") > 0 {
b1 = 0
print
}
END {
exit b1
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
20816 次 |
最近记录: |