【发布时间】:2014-07-10 19:06:03
【问题描述】:
我有大型数据表(~10M 行和~4M 行),我想在[$1,$2] 上进行数组匹配。这两个字段都是数字,如本例所示,从 4M 文件 1 的开头到 10M 行文件 2 的开头:
$ head -5 pantro2-hg19-liftover.frq
1 868476 A:0.388889
1 868841 A:0.666667
1 873398 A:0.555556
1 879624 A:0.05
1 879821 A:0.0625
$ head -5 tot_YRI10.frq
CHROM POS N_ALLELES N_CHR {ALLELE:FREQ}
1 30923 2 20 T:0.35 G:0.65
1 52238 2 20 G:0.55 T:0.45
1 54676 2 20 T:0.05 C:0.95
1 55164 2 20 A:0.55 C:0.45
不幸的是,如果[$1,$2] 的一部分与文件 2 中的$1,$2 匹配,则 AWK 似乎会进行模棱两可的匹配。当我使用以下命令时,会返回文件 2 的所有 10M 行:
$ awk 'NR==FNR{YRI[$1,$2];next} $1,$2 in YRI {print $1,$2,$NF}'
pantro2-hg19-liftover.frq tot_YRI10.frq |
head -5
CHROM POS {ALLELE:FREQ}
1 30923 G:0.65
1 52238 T:0.45
1 54676 C:0.95
1 55164 C:0.45
我想要的输出是在第 1 列和第 2 列上匹配 file1 的 file2 行。其中应该只有大约 15K 匹配项。我不确定在这种情况下,数组匹配是不明确的。
【问题讨论】:
-
发布错误的输出是可以的,但不如发布一些示例输入和预期输出有用。