文件的第二列等于一些变量

时间:2012-06-18 07:50:57

标签: unix awk

如果文件的第二列等于以下数字之一:

65,81,83,97,99,113,129,145,147,161,163,177     #To be read 65 OR 81 OR 83 OR 97 OR 99 etc..

然后我需要在输出文件中打印整行,因此输入以下内容:

samtools view myfile.bam | awk '{for (i=65,81,83,97,99,113,129,145,147,161,163,177) if ($2==i) ; print$0} > output.bam

那会有用吗?

2 个答案:

答案 0 :(得分:4)

您可以构建dict,其中包含BEGIN块中的数字列表 然后使用dict作为过滤器。

awk '
BEGIN {
    dict[65]
    dict[81]
    # skip
    dict[177]
}
$2 in dict' file.txt

答案 1 :(得分:1)

如果您有一个很长的列表,而不是有很多明确的分配:

awk 'BEGIN {
    numlist = "65,81,83,97,99,113,129,145,147,161,163,177"
    split(numlist, a, ",")
    for (i in numlist) {
        nums[a[i]]
    }
}
$2 in nums' inputfile