awk 根据前三列合并两个文件

发布于 2022-09-06 15:46:27 字数 803 浏览 16 评论 0

1.txt
Chr1 0 199 50 25 0.5000
Chr1 200 399 123 12 0.0976
Chr1 400 599 490 58 0.1184
Chr2 600 799 669 127 0.1898
ChrM 800 999 461 108 0.2343

2.txt
Chr1 0 199 110 39 0.3545
Chr1 200 399 411 33 0.0803
Chr1 400 599 397 44 0.1108
Chr5 600 799 620 109 0.1758

如何用awk ,根据前三列,如 “Chr1 0 199”实现两个文件的合并
结果是
3.txt
Chr1 0 199 50 25 0.5000 110 39 0.3545
Chr1 200 399 123 12 0.0976 411 33 0.0803
Chr1 400 599 490 58 0.1184 397 44 0.1108

并且能找出1.txt 2.txt独有的行

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

∞琼窗梦回ˉ 2022-09-13 15:46:27
awk 'FNR==NR{a[$1$2$3]=$4 FS $5 FS $6;next}{ if(a[$1$2$3]) {print $0, a[$1$2$3]} }' 2.txt 1.txt

Chr1 0 199 50 25 0.5000 110 39 0.3545
Chr1 200 399 123 12 0.0976 411 33 0.0803
Chr1 400 599 490 58 0.1184 397 44 0.1108

awk 'FNR==NR{a[$1$2$3]=$4 FS $5 FS $6;next}{ if(!a[$1$2$3]) {print $0} }' 2.txt 1.txt

Chr2 600 799 669 127 0.1898
ChrM 800 999 461 108 0.2343

awk 'FNR==NR{a[$1$2$3]=$4 FS $5 FS $6;next}{ if(!a[$1$2$3]) {print $0} }' 1.txt 2.txt

Chr5 600 799 620 109 0.1758

衣神在巴黎 2022-09-13 15:46:27

直接写个nodejs脚本或者shell脚本或者python脚本 多好

熟人话多 2022-09-13 15:46:27
$ awk '{t=$1" "$2" "$3;sub(t,"",$0);a[t]=a[t]?a[t]" "$0:$0;if(!b[t]++)c[++j]=t}END{for(i=1;i<=j;i++)print c[i],a[c[i]]}' 1.txt 2.txt
Chr1 0 199  50 25 0.5000  110 39 0.3545
Chr1 200 399  123 12 0.0976  411 33 0.0803
Chr1 400 599  490 58 0.1184  397 44 0.1108
Chr2 600 799  669 127 0.1898
ChrM 800 999  461 108 0.2343
Chr5 600 799  620 109 0.1758
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文