[英]awk program check if there is '0' in each line
样本输入:
a 54 65 43
b 45 12 98
c 99 0 12
d 3 23 0
样本输出: c,d
基本上我想检查每行中是否有零值,如果是,则打印索引(a,b,c,d)。
我的代码:
for(i=1;i<=NF;i++)if(i==0){print$1}
我有一个语法错误
谢谢。
另一种方法
$ awk '/\y0\y/{print $1}' file
c
d
\\y
是词边界运算符。 可能只在gawk
。
代码需要一组大括号。
awk '{ for(i=1;i<=NF;i++)if($i==0) print $1}' filename
(该print
所以我把那些出不需要括号。)
如果第一个字段不包含数字,则可能从 2 开始循环。
Awk 脚本的一般形式是一个序列
condition { action }
对,后者需要大括号围绕它。 在没有条件的情况下,无条件地在每一行上执行一个操作。
为了使您的代码工作,您需要将其更改为:
$ awk '{for(i=1;i<=NF;i++)if($i==0) print $1}' file
c
d
{}
对)。$i
而不是i
, $i
表示第i
列。print $1
)最好稍微改进一下:
awk '{for(i=1;i<=NF;i++)if($i==0) {print $1;next}}' file
添加next
以避免在行中有多个0
时多次print $1
。
鉴于列是空格分隔的,您也可以这样做:
awk '/( |^)0( |$)/{print $1}' file
这个不需要 GNU awk。
/( |^)0( |$)/
是一个RegEx ,在命令中它是$0 ~ /( |^)0( |$)/
的缩写。
^
表示行开始, $
行结束。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.