繁体   English   中英

使用awk基于两列联接文件

[英]Join files based on two columns using awk

我有以下两个文件;

$ cat file1
1 4
2 5
3 6

$ cat file2
4 2 N1
4 1 Y1
6 2 N2
6 3 Y2
2 5 Y3

我对file2的第三列感兴趣。 因此,我想基于两个第一列(即ID列)加入两个文件。 经过大量搜索(例如此处此处此处 ),我尝试了几件事,并且原理上是可行的。

awk 'FNR==NR{a[$1,$2];next}; ($1, $2) in a || ($2, $1) in a{print $3}' file1 file2
Y1
Y2
Y3

要么,

awk 'FNR==NR{a[$1,$2]=$3;next}; ($1, $2) in a || ($2, $1) in a{print $0, a[$1,$2]}' file2 file1
1 4
2 5 Y3
3 6

但是不是我确切想要的输出;

1 4 Y1
2 5 Y3
3 6 Y2

file1中ID的顺序很重要,因为第一列例如是男性,而第二列是女性。 file2列,也许无论是男性或女性。

像这样:

awk 'NR==FNR{s[$1 OFS $2]; next}
     ($2 OFS $1) in s {
         print $2, $1, $3
     }
     ($1 OFS $2) in s {
         print $1, $2, $3
     }' file file2

不是很短,但是可以完成以下工作:

$ awk 'FNR==NR{a[$1,$2]=$1 FS $2;a[$2,$1]=a[$1,$2];next}; ($1,$2) in a || ($2,$1) in a{print a[$1,$2],$3}' file1 file2

1 4 Y1
3 6 Y2
2 5 Y3

选择:

$ awk 'FNR==NR{a[$1,$2]=$1 FS $2;next}; {pr=0};($1,$2) in a {pr=a[$1,$2]};($2,$1) in a{pr=a[$2,$1]};pr{print pr,$3}' file1 file2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM