Bash 匹配两个文件中的行的步骤
我有两个以制表符分隔的文件: 归档Bash 匹配两个文件中的行的步骤,bash,perl,awk,grep,Bash,Perl,Awk,Grep,我有两个以制表符分隔的文件: 归档 chrM 150 chrM 5581 chr1 717485 chr1 719097 150 . T C 7807.77 PASS AC=2;AF=1.00;AN=2;DP=247;Dels=0.00;FS=0.000;HaplotypeScore=4.7038;MLEAC=2;MLEAF=1.00;MQ=51.13;MQ0=0;QD=31.61;VQSLOD=3.92;culprit=MQ;EFF=intergen
chrM 150
chrM 5581
chr1 717485
chr1 719097
150 . T C 7807.77 PASS AC=2;AF=1.00;AN=2;DP=247;Dels=0.00;FS=0.000;HaplotypeScore=4.7038;MLEAC=2;MLEAF=1.00;MQ=51.13;MQ0=0;QD=31.61;VQSLOD=3.92;culprit=MQ;EFF=intergenic_region(MODIFIER||||||||) GT:AD:DP:GQ:PL 1/1:0,247:247:99:7836,727,0
chrM 195 . C T 5638.77 PASS AC=2;AF=1.00;AN=2;DP=176;Dels=0.00;FS=0.000;HaplotypeScore=2.5193;MLEAC=2;MLEAF=1.00;MQ=42.23;MQ0=0;QD=32.04;VQSLOD=3.62;culprit=MQ;EFF=intergenic_region(MODIFIER||||||||) GT:AD:DP:GQ:PL 1/1:0,176:176:99:5667,517,0
chrM 199 rs72619362 T C 5058.77 PASS AC=2;AF=1.00;AN=2;DB;DP=169;Dels=0.00;FS=0.000;HaplotypeScore=0.7887;MLEAC=2;MLEAF=1.00;MQ=39.55;MQ0=0;QD=29.93;VQSLOD=4.68;culprit=MQ;EFF=intergenic_region(MODIFIER||||||||) GT:AD:DP:GQ:PL 1/1:0,169:169:99:5087,472,0
chrM 204 rs3135032 T C 4110.77 PASS AC=2;AF=1.00;AN=2;DB;DP=168;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;MLEAC=2;MLEAF=1.00;MQ=39.77;MQ0=0;QD=24.47;VQSLOD=2.90;culprit=MQ;EFF=intergenic_region(MODIFIER||||||||) GT:AD:DP:GQ:PL 1/1:0,168:168:99:4139,435,0
chrM 217 rs41531144 T C 4589.77 PASS AC=2;AF=1.00;AN=2;DB;DP=147;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;MLEAC=2;MLEAF=1.00;MQ=42.78;MQ0=0;QD=31.22;VQSLOD=4.51;culprit=MQ;EFF=intergenic_region(MODIFIER||||||||) GT:AD:DP:GQ:PL 1/1:0,147:147:99:4618,418,0
文件B
chrM 150
chrX 5581
chr1 717485
chr2 719097
150 . T C 7807.77 PASS AC=2;AF=1.00;AN=2;DP=247;Dels=0.00;FS=0.000;HaplotypeScore=4.7038;MLEAC=2;MLEAF=1.00;MQ=51.13;MQ0=0;QD=31.61;VQSLOD=3.92;culprit=MQ;EFF=intergenic_region(MODIFIER||||||||) GT:AD:DP:GQ:PL 1/1:0,247:247:99:7836,727,0
chrM 195 . C T 5638.77 PASS AC=2;AF=1.00;AN=2;DP=176;Dels=0.00;FS=0.000;HaplotypeScore=2.5193;MLEAC=2;MLEAF=1.00;MQ=42.23;MQ0=0;QD=32.04;VQSLOD=3.62;culprit=MQ;EFF=intergenic_region(MODIFIER||||||||) GT:AD:DP:GQ:PL 1/1:0,176:176:99:5667,517,0
chrM 199 rs72619362 T C 5058.77 PASS AC=2;AF=1.00;AN=2;DB;DP=169;Dels=0.00;FS=0.000;HaplotypeScore=0.7887;MLEAC=2;MLEAF=1.00;MQ=39.55;MQ0=0;QD=29.93;VQSLOD=4.68;culprit=MQ;EFF=intergenic_region(MODIFIER||||||||) GT:AD:DP:GQ:PL 1/1:0,169:169:99:5087,472,0
chrM 205 rs3135032 T C 4110.77 PASS AC=2;AF=1.00;AN=2;DB;DP=168;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;MLEAC=2;MLEAF=1.00;MQ=39.77;MQ0=0;QD=24.47;VQSLOD=2.90;culprit=MQ;EFF=intergenic_region(MODIFIER||||||||) GT:AD:DP:GQ:PL 1/1:0,168:168:99:4139,435,0
chrM 214 rs41531144 T C 4589.77 PASS AC=2;AF=1.00;AN=2;DB;DP=147;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;MLEAC=2;MLEAF=1.00;MQ=42.78;MQ0=0;QD=31.22;VQSLOD=4.51;culprit=MQ;EFF=intergenic_region(MODIFIER||||||||) GT:AD:DP:GQ:PL 1/1:0,147:147:99:4618,418,0
应仅打印两个文件中存在的行:
chrM 150
chr1 717485
第二个问题如果两个文件中都有多个列,如何仍然匹配两个文件的前两列,如果匹配,则打印第一个文件中的行。
样本数据
归档
chrM 150
chrM 5581
chr1 717485
chr1 719097
150 . T C 7807.77 PASS AC=2;AF=1.00;AN=2;DP=247;Dels=0.00;FS=0.000;HaplotypeScore=4.7038;MLEAC=2;MLEAF=1.00;MQ=51.13;MQ0=0;QD=31.61;VQSLOD=3.92;culprit=MQ;EFF=intergenic_region(MODIFIER||||||||) GT:AD:DP:GQ:PL 1/1:0,247:247:99:7836,727,0
chrM 195 . C T 5638.77 PASS AC=2;AF=1.00;AN=2;DP=176;Dels=0.00;FS=0.000;HaplotypeScore=2.5193;MLEAC=2;MLEAF=1.00;MQ=42.23;MQ0=0;QD=32.04;VQSLOD=3.62;culprit=MQ;EFF=intergenic_region(MODIFIER||||||||) GT:AD:DP:GQ:PL 1/1:0,176:176:99:5667,517,0
chrM 199 rs72619362 T C 5058.77 PASS AC=2;AF=1.00;AN=2;DB;DP=169;Dels=0.00;FS=0.000;HaplotypeScore=0.7887;MLEAC=2;MLEAF=1.00;MQ=39.55;MQ0=0;QD=29.93;VQSLOD=4.68;culprit=MQ;EFF=intergenic_region(MODIFIER||||||||) GT:AD:DP:GQ:PL 1/1:0,169:169:99:5087,472,0
chrM 204 rs3135032 T C 4110.77 PASS AC=2;AF=1.00;AN=2;DB;DP=168;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;MLEAC=2;MLEAF=1.00;MQ=39.77;MQ0=0;QD=24.47;VQSLOD=2.90;culprit=MQ;EFF=intergenic_region(MODIFIER||||||||) GT:AD:DP:GQ:PL 1/1:0,168:168:99:4139,435,0
chrM 217 rs41531144 T C 4589.77 PASS AC=2;AF=1.00;AN=2;DB;DP=147;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;MLEAC=2;MLEAF=1.00;MQ=42.78;MQ0=0;QD=31.22;VQSLOD=4.51;culprit=MQ;EFF=intergenic_region(MODIFIER||||||||) GT:AD:DP:GQ:PL 1/1:0,147:147:99:4618,418,0
文件B
chrM 150
chrX 5581
chr1 717485
chr2 719097
150 . T C 7807.77 PASS AC=2;AF=1.00;AN=2;DP=247;Dels=0.00;FS=0.000;HaplotypeScore=4.7038;MLEAC=2;MLEAF=1.00;MQ=51.13;MQ0=0;QD=31.61;VQSLOD=3.92;culprit=MQ;EFF=intergenic_region(MODIFIER||||||||) GT:AD:DP:GQ:PL 1/1:0,247:247:99:7836,727,0
chrM 195 . C T 5638.77 PASS AC=2;AF=1.00;AN=2;DP=176;Dels=0.00;FS=0.000;HaplotypeScore=2.5193;MLEAC=2;MLEAF=1.00;MQ=42.23;MQ0=0;QD=32.04;VQSLOD=3.62;culprit=MQ;EFF=intergenic_region(MODIFIER||||||||) GT:AD:DP:GQ:PL 1/1:0,176:176:99:5667,517,0
chrM 199 rs72619362 T C 5058.77 PASS AC=2;AF=1.00;AN=2;DB;DP=169;Dels=0.00;FS=0.000;HaplotypeScore=0.7887;MLEAC=2;MLEAF=1.00;MQ=39.55;MQ0=0;QD=29.93;VQSLOD=4.68;culprit=MQ;EFF=intergenic_region(MODIFIER||||||||) GT:AD:DP:GQ:PL 1/1:0,169:169:99:5087,472,0
chrM 205 rs3135032 T C 4110.77 PASS AC=2;AF=1.00;AN=2;DB;DP=168;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;MLEAC=2;MLEAF=1.00;MQ=39.77;MQ0=0;QD=24.47;VQSLOD=2.90;culprit=MQ;EFF=intergenic_region(MODIFIER||||||||) GT:AD:DP:GQ:PL 1/1:0,168:168:99:4139,435,0
chrM 214 rs41531144 T C 4589.77 PASS AC=2;AF=1.00;AN=2;DB;DP=147;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;MLEAC=2;MLEAF=1.00;MQ=42.78;MQ0=0;QD=31.22;VQSLOD=4.51;culprit=MQ;EFF=intergenic_region(MODIFIER||||||||) GT:AD:DP:GQ:PL 1/1:0,147:147:99:4618,418,0
输出
150 . T C 7807.77 PASS AC=2;AF=1.00;AN=2;DP=247;Dels=0.00;FS=0.000;HaplotypeScore=4.7038;MLEAC=2;MLEAF=1.00;MQ=51.13;MQ0=0;QD=31.61;VQSLOD=3.92;culprit=MQ;EFF=intergenic_region(MODIFIER||||||||) GT:AD:DP:GQ:PL 1/1:0,247:247:99:7836,727,0
chrM 195 . C T 5638.77 PASS AC=2;AF=1.00;AN=2;DP=176;Dels=0.00;FS=0.000;HaplotypeScore=2.5193;MLEAC=2;MLEAF=1.00;MQ=42.23;MQ0=0;QD=32.04;VQSLOD=3.62;culprit=MQ;EFF=intergenic_region(MODIFIER||||||||) GT:AD:DP:GQ:PL 1/1:0,176:176:99:5667,517,0
chrM 199 rs72619362 T C 5058.77 PASS AC=2;AF=1.00;AN=2;DB;DP=169;Dels=0.00;FS=0.000;HaplotypeScore=0.7887;MLEAC=2;MLEAF=1.00;MQ=39.55;MQ0=0;QD=29.93;VQSLOD=4.68;culprit=MQ;EFF=intergenic_region(MODIFIER||||||||) GT:AD:DP:GQ:PL 1/1:0,169:169:99:5087,472,0
谢谢从B
中的文件(-f
)A
中选择一个或多个换行分隔模式:
% grep -f A B
chrM 150
chr1 717485
grep-f
是。。。但约翰西韦布已经指出了这一点
从man grep
:
-f FILE,--FILE=FILE
从文件中获取模式,每行一个。空文件包含零
模式,因此不匹配任何内容。(-f由
POSIX.)
使用awk
您还可以执行以下操作:
$ awk 'FNR==NR {a[$0]; next} $0 in a' f1 f2
chrM 150
chr1 717485
更新 如果必须只匹配前两列,则不能再使用
grep
(至少在简单模式下)。此awk
使其(更新,!):
您可以将其中一个文件读入
%s
散列,其中键是行,使用散列作为查找表循环另一个文件
perl -ne 'BEGIN{local @ARGV=pop; @s{<>} = ()} print if exists $s{$_}' fileA fileB
perl-ne'BEGIN{local@ARGV=pop;@s{}=()}如果存在$s{$}文件a文件b,则打印
开关:
:为输入文件中的每一行创建-n
循环李>while(){…}
:告诉-e
在命令行上执行代码李>perl
awk'NR==FNR{a[$1,$2];next}($1,$2)在'f2 f1
中。