根据列值

时间:2017-05-26 17:35:36

标签: if-statement awk conditional

我有一个包含26列的文本文件,并且只有在第22列的值为' 0',' 1',' 2'时才必须过滤行。或者' 3' (0-5之外)。

如果第22列具有值' 0',' 1',' 2'或者' 3' (在下面突出显示),然后删除小于10和大于100的任何内容(基于第5列)并删除小于5.0的任何内容(此列具有小数)(基于第13列)。

我不知道如果第22列具有以下1到3的值并且保留输出文件中的其他行(即具有值4和5),如何插入执行以下操作的条件< / p>

awk -F "\t"  'NR==1; NR>1 {if ($5 > 10 && $5<100 && $13>5.0) print $0}' input.txt > output.txt

我的输入文件如下

  

Column1 ... Column5 ... Column13 .. Column22
  ID1 a1 5 0 5
   ID2 a2 10 1.2 0
   ID3 a3 4 5.6 1
   ID4 a4 300 2.6 2
   ID5 a5 40 32 0
   ID6 a6 200 4.6 3
  ID7 a7 200 4.5 5
  ID8 a8 3456 4.9 4

我想要的输出是

  

Column1 Column5 Column13 Column22

     

ID1 a1 5 0 5

     

ID5 a5 40 32 0

     

ID7 a7 200 4.5 5

     

ID8 a8 3456 4.9 4

感谢任何帮助。谢谢

1 个答案:

答案 0 :(得分:1)

一种替代方案是......

awk -F'\t' '{p=0<=$22 && $22<=3; q=10<$5 && $5<100 && 5<$13} NR==1 || q || !p ' file

您希望仅在$22介于0和3(p)之间时应用其他条件(q)。

如果您有可测试的输入输出,则可以对其进行验证。