比较N个文件的第一列,如果找到匹配项,则打印其余文件的第一列和第二列

时间:2019-08-06 10:22:42

标签: python perl awk

我有许多文件,每个文件有两列,并希望将文件与第一列进行比较。如果在所有文件中都找到匹配项,则打印第一文件和剩余文件的第二列。

输入示例

文件1

 apple    tree
 great    see
 see      apple
 tree     bee
 make     change

文件2

great    2
see      3
tree     4
make     5

文件3

apple    10  
great    9
see      8
tree     7

预期产量

 great    see     2     9
 see      apple   3     8
 tree     bee     4     7

我只能处理两个文件。使用

 awk  'FNR==NR {a[$1]=$0; next}; $1 in a {print a[$1]}' file1 file2

3 个答案:

答案 0 :(得分:1)

如果所有文件中的第一列都包含唯一值,则可以解决问题:

$ awk '{a[$1]=a[$1]"\t"$2} ++n[$1]==3{print $1 a[$1]}' file1 file2 file3
great   see     2       9
see     apple   3       8
tree    bee     4       7

答案 1 :(得分:1)

请您尝试以下操作(这也会照顾到第一个字段的顺序,它们按照出现的顺序出现在输出中)。

awk '
!c[$1]++{
  d[++count]=$1
}
{
  a[$1]++
  b[$1]=(b[$1]?b[$1] OFS:"")$NF
}
END{
  for(i=1;i<=count;i++){
    if(a[d[i]]==3){
       print d[i],b[d[i]]
    }
  }
}
'  file1 file2 file3  | column -t

答案 2 :(得分:0)

使用join

$ join <(sort file1) <(sort file2) | join - <(sort file3)
great see 2 9
see apple 3 8
tree bee 4 7