我正在尝试从一个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
非常感谢 中号
答案 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