我有一个包含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
感谢任何帮助。谢谢
答案 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)。
如果您有可测试的输入输出,则可以对其进行验证。