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

时间:2014-09-30 19:59:41

标签: bash shell sorting uniq

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

文件1:

  

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

file2的:

  

6 Kevin 250
  7南希300
  8 John 100

输出:

  

1 John 300
  7南希300
  3克里斯100
  8 John 100

当我使用以下命令时:

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

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

2 个答案:

答案 0 :(得分:4)

这个单行为您提供输出:

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

答案 1 :(得分: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