我试图从一个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

非常感谢

最佳答案

用锥子

 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

10-07 23:07