Bash 使用awk打印输出行的值大于1

Bash 使用awk打印输出行的值大于1,bash,awk,Bash,Awk,我试图从一个文件中取出数据,其中任何一行的值都大于1。你们知道什么简单的方法吗 awk -F"\t" '{if(($3>1)||($4>1)||($5>1)||($6>1)||($7>1)||($8>1)||($9>1)||($10>1)||($11>1)||($12>1)||($13>1)||($14>1)||($15>1)||($16>1)||($17>1)||($18>1))print$0}'

我试图从一个文件中取出数据,其中任何一行的值都大于1。你们知道什么简单的方法吗

awk -F"\t" '{if(($3>1)||($4>1)||($5>1)||($6>1)||($7>1)||($8>1)||($9>1)||($10>1)||($11>1)||($12>1)||($13>1)||($14>1)||($15>1)||($16>1)||($17>1)||($18>1))print$0}' file1.txt > file2.txt

您可以在awk中为循环使用
,而不是编写那么多条件:

awk -F"\t" '{for(i=3; i<=18; i++){if($i>1){print $0; next;}}}' filename
awk-F“\t”{for(i=3;i1){print$0;next;}}文件名
如果希望将列从
3
压缩到最后一列,请在循环条件中使用
NF
而不是
18

awk-F'\t'{F=0;for(i=3;i1)F=1}F'file1.txt
awk -F'\t' '{f=0; for (i=3;i<=18;i++) if ($i>1) f=1} f' file1.txt

您可以从i=1开始,使用NF代替18。但是如果有文本字段,它们将被打印。使用
next
而不是
break
这将是faster@A.Danischewski我从
I=3
写到
I=18
,因为OP在条件语句中使用了它。干得好,我对NF进行了泛化,可能忽略了3,因为与1相比-您可能还想补充一点,如果列具有文本值,它将被打印-如果您不希望出现这种行为,您需要检查列值是否为数字。您是否缺少
print
语句?@Marki555结尾处的
f
如果它是1,则打印它,因为awk的默认操作是打印该行。谢谢,我不知道:)为了获得较小的效率:
if($i>1){f=1;break}
——您可以节省几微秒。@glennjackman或者完全删除变量
if($i>1){print;break}