【问题标题】:bash- get all lines with the same column value in two filesbash-获取两个文件中具有相同列值的所有行
【发布时间】:2014-09-30 19:59:41
【问题描述】:

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

文件1:

1 约翰 300
2 伊莱 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 

我从输入文件中只得到一行具有重复值。我两个都需要!

【问题讨论】:

    标签: bash shell sorting uniq


    【解决方案1】:

    这一单行字为您提供输出:

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

    【讨论】:

    • @user3490988 awk 首先读取file1,将所有行保存在“哈希表”中,键是第3列,值是行。然后处理第二个文件,检查“hashtable”中file2.line的第3列,如果找到,打印相应的行(a[$3])和file2.line。如果你不知道 awk 的语法,很难解释得很详细。我建议你阅读 awk 的手册页。
    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-13
      • 1970-01-01
      • 2018-05-07
      • 1970-01-01
      • 2021-05-24
      • 2014-03-14
      • 1970-01-01
      • 2013-11-10
      相关资源
      最近更新 更多