鍍金池/ 問(wèn)答/PHP  網(wǎng)絡(luò)安全/ awk 根據(jù)前三列合并兩個(gè)文件

awk 根據(jù)前三列合并兩個(gè)文件

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 ,根據(jù)前三列,如 “Chr1 0 199”實(shí)現(xiàn)兩個(gè)文件的合并
結(jié)果是
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獨(dú)有的行

回答
編輯回答
憶往昔

直接寫(xiě)個(gè)nodejs腳本或者shell腳本或者python腳本 多好

2017年2月21日 23:38
編輯回答
墻頭草
$ 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
2017年5月21日 15:25
編輯回答
鐧簞噯
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

2017年5月6日 13:43