awk使用if语句获得一句话中多行的结果
我是awk使用if语句获得一句话中多行的结果,awk,Awk,我是awk新手,我想知道我是否可以为awk上的if操作获得一个单一结果 例如: cat example.txt: 0 0 0 0 0 awk'{if($1==0)打印“全零”;否则打印“有1”} 结果: all zeros all zeros all zeros all zeros all zeros 我希望只有一个全零作为答案,或者一个真。在这种情况下,我是否应该使用awk函数返回某些内容?谢谢以这种方式使用您的代码。使用显示的样本进行书写和测试 awk '$0==0{count++} E
awk
新手,我想知道我是否可以为awk
上的if
操作获得一个单一结果
例如:
cat example.txt
:
0
0
0
0
0
awk'{if($1==0)打印“全零”;否则打印“有1”}
结果:
all zeros
all zeros
all zeros
all zeros
all zeros
我希望只有一个
全零
作为答案,或者一个真
。在这种情况下,我是否应该使用awk
函数返回某些内容?谢谢以这种方式使用您的代码。使用显示的样本进行书写和测试
awk '$0==0{count++} END{if(count==FNR){print "TRUE"}}' Input_file
或
或在发现某些非零行时打印消息:
说明:添加上述内容的详细说明
awk ' ##Starting awk program from here.
$0==0{ ##Checking condition if current line is zero then do following.
count++ ##Increasing count with 1 here.
}
END{ ##Starting END block of this program from here.
if(count==FNR){ ##Checking condition if count is equal to number of total lines of file.
print "TRUE" ##If above condition is TRUE then print TRUE here.
}
}
' Input_file ##Mentioning Input_file name here.
下面是一个使用gnu awk的替代方案:
awk-vrs='^(0\r?\n)+$'{print(NF?)有1:“全零”)}文件
全零
我会使用GNUAWK
让file.txt
内容
0
0
0
0
0
然后
输出
all zeros
说明:我正在使用nonzero
来存储信息,如果某个非零值已被保存(值1
)或未保存(值0
)。如果您是关于未在算术上下文中的awk
中设置的变量,则其值为0
,因此我不需要在开始
部分中声明非零=0
。I线束|
,逻辑或,可描述如下:
- 如果您之前没有看到非零元素,现在也没有看到,则表示到目前为止没有非零元素(
)0 | | 0==0
- 如果您之前没有看到非零元素,而现在确实看到了,则表示到目前为止存在非零元素(
)0 | | 1==1
- 如果您在前面看到非零元素,但现在没有看到,则表示到目前为止存在非零元素(
)1 | | 0==1
- 如果您确实看到了非零元素,并且现在确实看到了,这意味着到目前为止还存在非零元素(
)1 | 1==1
结束
第一节中,根据非零
值和参数,打印没有零
或全零
(在gawk 4.2.1中测试)另一个:
$ awk '$0{exit v=1}END{printf "All %szeroes\n",(v?"not ":"")}' file
输出样本数据:
All zeroes
替代输出:
All not zeroes
解释:
$ awk '
$0 { # if record evaluates to non-zero
exit v=1 # jump to END with "parameter" 1
} # why continue once non-zero seen
END {
printf "All %szeroes\n",(v?"not ":"") # if "parameter" v was set, output "not"
}' file
检查
$0
的条件当然可以是更具体的条件(例如$0==“0”
),但对于这个目的已经足够了exit v=1
将varv
设置为值1,但一旦找到$0
的非零值,它也会退出程序,并跳到结束
,检查v
的值。程序最终以退出代码1退出。如果这是不可接受的,您需要使用exit 0
明确退出END
count
是一个类似If
的关键字?不要获取count++
在其他语言(如python)中这像value++=1
吗?@alex,是的,这是一个变量名,我也添加了上面的详细解释,如果有任何疑问,请务必让我知道。这样我也可以使用foo
而不是count
,对吗?++
是在满足条件的情况下将每行增加1的诀窍,对吗?@alex,是的,这是正确的,在awk
中,您可以直接分配/增加值,而无需定义它,是的,您也可以给出任何您喜欢的名称:)干杯它必须是awk
?您可以使用grep-qvx“0”ip.txt&&echo“TRUE”
(或根据您要处理的输入类型修改的正则表达式)
All zeroes
All not zeroes
$ awk '
$0 { # if record evaluates to non-zero
exit v=1 # jump to END with "parameter" 1
} # why continue once non-zero seen
END {
printf "All %szeroes\n",(v?"not ":"") # if "parameter" v was set, output "not"
}' file