If statement 基于列值筛选文本文件

If statement 基于列值筛选文本文件,if-statement,awk,conditional,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的行)保留在输出文件中 awk -F "\t" 'NR==1; NR>1 {if ($5 > 10

我有一个包含26列的文本文件,只有当第22列的值为“0”、“1”、“2”或“3”(0-5中的一列)时,才需要筛选行

如果第22列的值为“0”、“1”、“2”或“3”(下面突出显示),则删除小于10且大于100的值(基于第5列),并删除小于5.0的值(此列有小数)(基于第13列)

我不知道如何插入条件,仅当第22列的值为1到3时才执行以下操作,并将其他行(即值为4和5的行)保留在输出文件中

awk -F "\t"  'NR==1; NR>1 {if ($5 > 10 && $5<100 && $13>5.0) print $0}' input.txt > output.txt
awk-F“\t”NR==1;NR>1{if($5>10&&55.0)打印$0}'input.txt>output.txt
我的输入文件如下

专栏1。。。第五栏。。。第13栏。。第22列
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

我想要的结果是

第1栏第5栏第13栏第22栏

ID1 a1 5 0 5

ID5 a5 40 32 0

ID7 a7 200 4.5 5

ID8 a8 3456 4.9 4


感谢您的帮助。谢谢

另一种选择是

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

awk-F'\t''{p=0示例输入和预期输出将不胜感激。抱歉@piokuc,我现在已经添加了示例输入和预期输出。您的示例输入/输出as不可用,因为您省略了脚本需要引用的其他列以获得正确的列索引。谢谢,但这也提供了与我尝试的代码类似的输出,在这里它是fi从$22筛选值0-3,但不在输出中保留值4和5。