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:“全零”)}文件
全零

我会使用GNU
AWK
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
将var
v
设置为值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