使用awk基于两列连接文件

时间:2018-02-05 09:38:23

标签: unix awk text-processing

我有以下两个文件;

$ 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列加入这两个文件。经过大量搜索(例如hereherehere)后,我尝试了一些事情并且原则上有效;

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中,列可能是男性或女性。

2 个答案:

答案 0 :(得分:1)

像这样:

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

答案 1 :(得分:1)

不是很短,但是做的是:

var n = Java.type('C.JavaFolder.sample.Nsample');

var result = n.getUrlContents("https://freewebsitetemplates.com/");
print(result);

替代:

$ 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