bash-获取两个文件中具有相同列值的所有行

bash-获取两个文件中具有相同列值的所有行,bash,shell,sorting,uniq,Bash,Shell,Sorting,Uniq,我有两个文本文件,每个文件有3个字段。我需要在第三个字段中获得具有相同值的行。第三个字段值在每个文件中都是唯一的。例如: 文件1: 1约翰300 2 Eli 200 3克里斯100 4安600 文件2: 6凯文250 7南希300 8约翰100 输出: 1约翰300 7南希300 3克里斯100 8约翰100 当我使用以下命令时: cat file1 file2 | sort -k 3 | uniq -c -f 2 我只从输入文件中获得一行重复值。我两者都需要 这一行程序为您提供了输出: a

我有两个文本文件,每个文件有3个字段。我需要在第三个字段中获得具有相同值的行。第三个字段值在每个文件中都是唯一的。例如:

文件1:

1约翰300
2 Eli 200
3克里斯100
4安600

文件2:

6凯文250
7南希300
8约翰100

输出:

1约翰300
7南希300
3克里斯100
8约翰100

当我使用以下命令时:

cat file1 file2 | sort -k 3 | uniq -c -f 2 

我只从输入文件中获得一行重复值。我两者都需要

这一行程序为您提供了输出:

awk 'NR==FNR{a[$3]=$0;next}$3 in a{print a[$3];print}' file1 file2
我的解决办法是

join -1 3 -2 3 <(sort -k3 file1) <(sort -k3 file2) | awk '{print $2, $3, $1; print $4, $5, $1}'

join-1 3-2 3@user3490988 awk first read file1,在“hashtable”中保存所有行键为第3列,值为行。然后处理第二个文件,检查“哈希表”中file2.line的第三列是否存在,如果找到,则打印相应的行(a[$3])和file2.line。如果您不知道awk的语法,很难详细解释。我建议你阅读awk的手册页。
join -1 3 -2 3 <(sort -k3 file1) <(sort -k3 file2) -o "1.1 1.2 0 2.1 2.2 0" | xargs -n3