awk 从多个文本文件中提取与特定数字范围匹配的行

awk 从多个文本文件中提取与特定数字范围匹配的行

例如,我在一个制表符分隔的文本文件中包含以下两列:

blah    ABC_DE_23154_e53G_12
blah    DEF_GH_23165_f35H_36
blah    CED_BF_56412_c56T_21

我使用以下 awk 脚本来提取与第二列中的第三个数字匹配的行,该数字落在第二个下划线之后的特定范围(23153 和 23167 之间)(这不起作用):

awk -F "_" '$2>23153 && $2<23167' *.txt >> output.txt

“output.txt”文件内的输出应该是:

blah    ABC_DE_23154_e53G_12
blah    DEF_GH_23165_f35H_36

我有大约 600 个文本文件,每个文件中有大约 8000 行数据。

谢谢,等离子33

答案1

我认为第一个问题出$2在您的 awk 脚本中,因为 with$2是第二列(DE、GH、BF,...),而不是您要比较的数字所在的第三列。

然后,应该有一个条件,以及如果满足条件你想要做什么。

awk -F'_' '($3>23153 && $3<23167){print}' *.txt >> output.txt

中有一个条件()和 中有一个动作{}

编辑:

正如我在评论中提醒的那样,{print}action 是默认的,因此您可以进一步简化 awk 脚本:

awk -F'_' '($3>23153 && $3<23167)' *.txt >> output.txt

答案2

尝试使用Python

k=open('filename','r')
for i in k:
    k=i.strip().split('_')[2]
    if int(k) > 23153<23167:
        print i.strip()

输出

blah    ABC_DE_23154_e53G_12
blah    DEF_GH_23165_f35H_36
blah    CED_BF_56412_c56T_21

相关内容