首页 > 解决方案 > 比较 N 个文件的第一列,如果找到匹配,则打印剩余文件的第一列和第二列

问题描述

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

输入示例

文件 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

标签: pythonperlawk

解决方案


您能否尝试以下操作(这也将处理第一个字段的序列,它们出现的顺序将在输出中出现)。

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

推荐阅读