如何从同一列上匹配的两个文件打印输出?

时间:2019-01-09 00:07:40

标签: bash awk

我有两个文件

 >vi cc4
163489921       ENSG00000145416
163490721       ENSG00000145416
163493030       ENSG00000145416
163494582       ENSG00000145416
163498263       ENSG00000145416
163506833       ENSG00000145416
163510223       ENSG00000145416
...

>vi bed_chr_4.bed
chr4    171975321       171975322       rs230   0       -
chr4    10204223        10204224        rs231   0       +
chr4    184363210       184363211       rs232   0       -
chr4    39547490        39547491        rs529   0       +
chr4    109740780       163489921       rs551   0       -
chr4    25929702        25929703        rs554   0       +
chr4    17624034        17624035        rs555   0       +
...

我想处理cc4的第一列和bed_chr_4.bed的第三列,并打印出bed_chr_4.bed的匹配行以及匹配的cc4的第二列。我要为该示例获取的输出将是:

chr4    109740780       163489921       rs551   0       -     ENSG00000145416

我尝试过:

awk 'NR==FNR{a[$1]=$1;next}a[$3]{print $0}' cc4 bed_chr_4.bed >outfile

但是我从bed_chr_4.bed仅获得6列匹配项,而不是从cc4获得第二列,在这种情况下为:ENSG00000145416

我只得到这个:

chr4    109740780       163489921       rs551   0       - 

1 个答案:

答案 0 :(得分:0)

您快到了。问题是您正在将operator()分配给lambda。 请尝试:

$1

准确地说,它依赖于cc4的第二个字段具有一个值的假设 评估为正确。也许更安全地说:

a[$1]