我有许多文件,每个文件有两列,并希望将文件与第一列进行比较。如果在所有文件中都找到匹配项,则打印第一文件和剩余文件的第二列。
输入示例
apple tree
great see
see apple
tree bee
make change
great 2
see 3
tree 4
make 5
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
答案 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