我有一个大文件.pagination {
margin: auto;
text-align: center;
outline: medium none;
padding: 0;
position: relative;
color: #000000;
font-family: Arial,Helvetica,sans-serif;
font-size: 12px;
line-height: 18px;
}
.label {
color: #ffffff;
display: inline-block;
font-size: 11.844px;
font-weight: bold;
line-height: 14px;
padding: 2px 4px;
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
vertical-align: baseline;
white-space: nowrap;
}
(制表符分隔),大约有800万行,文件如下所示:
A
另一个文件1 10001
1 10005
1 10019
1 10055
1 10108
看起来像这样:
B
我想要的是将文件#CHROM POS ID REF ALT QUAL FILTER INFO
1 10001 . T C . . AF=0.0000384;AC=1;AN=26028;DS=SS6004475
1 10002 . A C,T . . AF=0.0001153,0.0000384;AC=3,1;AN=26028;DS=HGDP00927|HGDP00998|HGDP01284,HGDP01029
1 10002 . A AT . . AF=0.0000384;AC=1;AN=26028;DS=HGDP00521
1 10003 . A C,T . . AF=0.0000384,0.0000768;AC=1,2;AN=26028;DS=HGDP01284,HGDP00521|HGDP00927
1 10004 . C A . . AF=0.0000384;AC=1;AN=26028;DS=HGDP01284
1 10018 . C T . . AF=0.0000384;AC=1;AN=26028;DS=HGDP00998
1 10019 rs775809821 TA T . . AF=0.0000384;AC=1;AN=26028;END=10020;DS=Malay
1 10055 rs768019142 T TA . . AF=0.0000384;AC=1;AN=26028;DS=Malay
1 10108 rs62651026 C T . . AF=0.0000768;AC=2;AN=26028;DS=HGDP00778|HGDP0456
中的列与文件A
的前两列匹配,并将文件B
的第3列中的信息添加到文件{{1 }}。如果没有匹配,我想输出B
。期望的输出将是这样的。 A
文件还有几条带NA
的注释行,我想在阅读文件时避免使用。输出将是这样的:
B
由于
答案 0 :(得分:3)
您可以编写类似
的内容awk 'NR==FNR{line[$1" "$2]=$3; next} ($0 in line){print $0,line[$0]; next} {print $0, "NA"}' file2 file1
示例强>
$ awk 'NR==FNR{line[$1" "$2]=$3; next} ($0 in line){print $0,line[$0]; next} {print $0, "NA"}' file2 file1
1 10001 .
1 10005 NA
1 10019 rs775809821
1 10055 rs768019142
1 10108 rs62651026
它的作用是什么?
NR==FNR{line[$1" "$2]=$3; next}
如果输入文件是第一个文件(由NR==FNR
处理),那么我们将$3
保存在line
索引的$1" "$2
中{1}}。
($0 in line){print $0,line[$0]; next}
对于第二个文件,如果当前行位于line
,则打印该行,然后输入file2
中的值。
{print $0, "NA"}
如果不打印后跟NA
的行。
答案 1 :(得分:0)
您的第1列是否仅包含数值?这些包含超过1-2位数?您是否期望第二列中的数字大于5-9位?这两个文件是否按数字排序(即sort -k1n,1 -k2n,2
)?第1列和第2列的组合在每个文件中是唯一的(或者它们是否包含重复项)?如果您对以上所有问题的回答都是肯定的,那么这是另一种解决方案。
join -a1 -o 1.2,1.3,2.2 -e "NA" \
<(awk '{printf("%02d:%09d\t%s\t%s\n", $1, $2, $1, $2)}' A) \
<(cat B | grep -v ^# | awk '{printf("%02d:%09d\t%s\n", $1, $2, $3)}')
如果文件B
被gzip压缩,则只需使用zcat B
或gunzip -c B
代替cat B
。