我想知道是否有更有效的方法来使用awk/grep/sed来解决以下问题?如何匹配特定列中的多个模式?
我想解析通过我的输入文件(在这个例子中的第1列)的某一列,并使用awk/grep /任何其他函数子集和选择匹配我的查询模式。例如给出下面的文件;
chr1 3009844 3009908 DXX 42 -
chr2 3000386 3000450 DXX 15 -
chr3 3000386 3000450 DXX 15 -
chr4 3000386 3000450 DXX 15 -
chr5 3000386 3000450 DXX 15 -
chr6 3000386 3000450 DXX 15 -
chr7 3000386 3000450 DXX 15 -
chr8 3000386 3000450 DXX 15 -
chr9 3000386 3000450 DXX 15 -
chr10 3000386 3000450 DXX 15 -
chr11 3000386 3000450 DXX 15 -
chr12 3000386 3000450 DXX 15 -
chr13 3000386 3000450 DXX 15 -
chr14 3000386 3000450 DXX 15 -
chr15 3000386 3000450 DXX 15 -
chr16 3000386 3000450 DXX 15 -
chr17 3000386 3000450 DXX 15 -
chr18 3000386 3000450 DXX 15 -
chr19 3000386 3000450 DXX 15 -
chrX 3000386 3000450 DXX 15 -
chrY 3000386 3000450 DXX 15 -
chr1_GL456210_random 3000386 3000450 DXX 15 -
chr1_GL456211_random 3000386 3000450 DXX 15 -
chr1_GL456212_random 3000386 3000450 DXX 15 -
chr1_GL456221_random 3000386 3000450 DXX 15 -
chr4_GL456216_random 3000386 3000450 DXX 15 -
chr4_JH584292_random 3000386 3000450 DXX 15 -
chr4_JH584295_random 3000386 3000450 DXX 15 -
chr5_GL456354_random 3000386 3000450 DXX 15 -
chr5_JH584296_random 3000386 3000450 DXX 15 -
chr5_JH584297_random 3000386 3000450 DXX 15 -
chr5_JH584299_random 3000386 3000450 DXX 15 -
chrX_GL456233_random 3000386 3000450 DXX 15 -
我只想具有仅已CHR1-chr22的输出,chrX和CHRY存在于第一列中,例如;
chr1 3009844 3009908 DXX 42 -
chr2 3000386 3000450 DXX 15 -
chr3 3000386 3000450 DXX 15 -
chr4 3000386 3000450 DXX 15 -
chr5 3000386 3000450 DXX 15 -
chr6 3000386 3000450 DXX 15 -
chr7 3000386 3000450 DXX 15 -
chr8 3000386 3000450 DXX 15 -
chr9 3000386 3000450 DXX 15 -
chr10 3000386 3000450 DXX 15 -
chr11 3000386 3000450 DXX 15 -
chr12 3000386 3000450 DXX 15 -
chr13 3000386 3000450 DXX 15 -
chr14 3000386 3000450 DXX 15 -
chr15 3000386 3000450 DXX 15 -
chr16 3000386 3000450 DXX 15 -
chr17 3000386 3000450 DXX 15 -
chr18 3000386 3000450 DXX 15 -
chr19 3000386 3000450 DXX 15 -
chrX 3000386 3000450 DXX 15 -
chrY 3000386 3000450 DXX 15 -
我设法找到使用下面的命令来解决:
awk '$1 == "chr1" || $1 == "chr2" || $1 == "chr3" || $1 == "chr4" || $1 == "chr5" || $1 == "chr6" || $1 == "chr7" || $1 == "chr8" || $1 == "chr9" || $1 == "chr10" || $1 == "chr11" || $1 == "chr12" || $1 == "chr13" || $1 == "chr14" || $1 == "chr15" || $1 == "chr16" || $1 == "chr17" || $1 == "chr18" || $1 == "chr19" || $1 == "chr20" || $1 == "chrX" || $1 == "chrY"' in_file > out_file
它工作正常,但不知道是否亲爱的会员将有一个更优雅的方式来解决这个问题?或者,如果您可以指向资源在Linux中探索awk/grep,那将非常感谢!
这也会匹配'chr0'。如果这不是有意的,我们可以重构一点。 – fedorqui
@BlueMoon是真的!没有检查完整的解释,只是样本输入/期望输出。更新,谢谢。 – fedorqui
非常酷!如果我理解代码$ 1-特定的第一列。 “〜”?? “〜”的功能是什么? 。我不知道什么是“1”?正在做..你介意详细介绍一下吗? :) – Learner