繁体   English   中英

awk 程序检查每行是否有“0”

[英]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        
  • 您需要将代码放在一个块中( {}对)。
  • 您必须在 if 条件中使用$i而不是i$i表示第i列。
  • 虽然这里不需要,但最好在 command 和 paramter 之间添加一个空格。 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM