基于另一个查询文件从一个文件中提取行 - linux

时间:2014-10-30 17:12:43

标签: linux

我正在尝试从一个fileA中提取基于fileB(匹配)的行。

档案A

chr gene start stop pval
1   xic  455   467 0.005
2   ABD  5667  5789 0.03
5   GHE  4556  4784 0.23
6   sdg  4568  4677 0.558

档案B

ABD
GHE

所以输出将是

chr gene start stop pval
2   ABD  5667  5789 0.03
5   GHE  4556  4784 0.34

我试试这段代码:

grep -f B A>> A_B.txt

问题: 在示例文件中,一切运行正常,但是当我在我的数据集中尝试时,它给出了实际列表(ABD,GHE)以及其他一些列表(sdg)......

 chr gene start stop pval
    2   ABD  5667  5789 0.03
    5   GHE  4556  4784 0.34
    6   sdg  4568  4677 0.558

建议: 我怎么解决它... 是否可以集成少量代码,以便我只获得选定的列

期望的输出:

        chr gene pval
        2   ABD  0.03
        5   GHE  0.34
        6   sdg  0.558

非常感谢 中号

1 个答案:

答案 0 :(得分:1)

使用awk

 awk 'FNR==NR{a[$2]=$0; if(NR==1) print $0} ($1 in a) {print a[$1]}' FileA FileB > output.txt

如果要选择列

awk 'FNR==NR{a[$1]=$0}($2 in a) {print $1,$2,$5}' FileB FileA > output.txt