bash – 在’for循环’下的awk’if condition’中求和变量
我有一个3列(n = 3)和FS =“”(file1.txt)的文件:
cat file1.txt 3.1 6.6 0 2.4 7.1 4.9 5.7 1.2 6.1 在这里,我想在每个列的awk中给出一个’if条件’,它将测试条件并返回值1或0(取决于结果)并将其存储在另一个变量中,例如: #!/bin/bash #code1 awk '{ if ($1 != 0) { x1 = 1 } else { x1 = 0} if ($2 != 0) { x2 = 1 } else { x2 = 0} if ($3 != 0) { x3 = 1 } else { x3 = 0} x = x1 + x2 + x3 print x; }' file1.txt > output.txt 在这种情况下,所需的输出将是: cat output.txt 2 3 3 我没有遇到任何问题. 考虑这样的情况:不是有3列,而是有10列(n = 10),如果要对每列应用条件,则相同.在这种情况下,我想运行一个for循环,在该循环下定义相同的if条件.但我认为我在指定第n个字段时出错.另外如何执行xn变量的总和(x1 X2 X3 … X10).这是我到目前为止所尝试的: awk '{ for (n=1; n<=10; n++) if ($n != 0) { xn = 1 } else { xn = 0 } xn+=xn print xn; }' file1_10fields.txt > output_10fields.txt 这不是给我正确的输出.我在哪里弄错了?有没有更优雅的方式来做到这一点? 解决方法
你可以使用这个awk:
awk '{sum=0; for (i=1; i<=NF; i++){sum += $i ? 1 : 0} print sum}' file 2 3 3 > Read more about ternary operator
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |