将第一个文件的第一和第二列与第二个文件的第一列匹配

时间:2019-09-07 08:55:55

标签: perl awk sed

要比较第一个文件的第一和第二列与第二个文件的第一列。

我执行以下操作:

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

我的脚本的结果是

3 b 33 44
2 c 44 11
5 d 12 21

我仅获得第一列的结果,并且不打印重复的值。我也希望我的输出具有重复的值。

File1

a c 0.1
a b 0.4
b d 0.1
b a 0.8
b c 0.8
c b 0.7
c a 0.6
c d 0.9
d c 0.3 

File2

b 3 33 44
c 2 44 11
d 5 12 21 

预期输出:

3 b 33 44  5  d 12 21  0.1
3 b 33 44  2  c 44 11  0.8
2 c 44 11  3  b 33 44  0.7
2 c 44 11  5  d 12 21  0.9
5 d 12 21  2  c 44 11  0.3

1 个答案:

答案 0 :(得分:3)

file2之前阅读file1更实用。

$ awk 'NR==FNR {
  a[$1]=($2 OFS $1 OFS $3 OFS $4)
  next
}
($1 in a)&&($2 in a) {
  print a[$1],a[$2],$3
}' file2 file1
3 b 33 44 5 d 12 21 0.1
3 b 33 44 2 c 44 11 0.8
2 c 44 11 3 b 33 44 0.7
2 c 44 11 5 d 12 21 0.9
5 d 12 21 2 c 44 11 0.3