2014-09-30 83 views
2

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

file1的:

约翰一书300
2礼200
3克里斯100
4安600

file2的:

6凯文250
南希300
8约翰100

输出:

约翰一书300
7南西300
3克里斯100
8约翰100

当我使用下面的命令:

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

我从输入文件中只获得一个重复值的行。我需要两个!

回答

4

这一个班轮为您提供了输出:

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

谢谢!你能告诉我它是如何工作的吗? – ahb65 2014-09-30 20:40:22

+1

@ user3490988 awk先读取file1,将所有行保存在一个“hashtable”键值为第3列,值为行。然后处理第二个文件,检查“hashtable”中file2.line的第三列是否被找到,打印相应的行(a [$ 3])和file2.line。如果你不知道awk的语法,很难详细解释。我建议你阅读awk的手册页。 – Kent 2014-09-30 20:43:36

2

我的解决办法是

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 <(sort -k3 file1) <(sort -k3 file2) -o "1.1 1.2 0 2.1 2.2 0" | xargs -n3 
相关问题