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

Unix 文件的第二列等于一些变量,unix,awk,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} > ou

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

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

这行吗?

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

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

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

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