【问题标题】:Awk Comparsion in multiple files多个文件中的 awk 比较
【发布时间】:2018-07-24 14:47:20
【问题描述】:

我有 2 个文件:

file1:

1,apple  
2,mango  
3,banana  
44,orange  

file2:

1,apple  
22,  
31,xyz  
2,man  
3,banana  
44,oran   
44,orange

我需要找到使用第 1 列和检查第 2 列的文件之间的差异。我不想使用 $0 作为它打印第一个文件中不存在于 file2 中的行。

结果输出应以file3 打印为:

2,mango,man  
44,orange,oran        

Mango 来自 file1(第 2 列),man 来自 file2(第 2 列)

【问题讨论】:

    标签: awk


    【解决方案1】:

    关注awk 可能对您有所帮助。

    awk -F, 'FNR==NR{a[$1]=$0;b[$2];next} ($1 in a) && !($2 in b){print a[$1],$2}' OFS=,   Input_file1  Input_file2
    

    如果您想将输出放入名为 file3 的文件中,请在上述命令的最后添加 > file3

    【讨论】:

      【解决方案2】:

      awk 略有不同:

      $ awk 'BEGIN{FS=OFS=","}($1 in a) && a[$1]!=$2{print $1,a[$1],$2}{a[$1]=$2}' file1 file2
      2,mango,man  
      44,orange,oran  
      

      解释:

      awk 'BEGIN {
          FS=OFS=","            # set separators
      }
      ($1 in a) && a[$1]!=$2 {  # if the id is in a and $2s differ   (may occur only after file1 
          print $1,a[$1],$2     # output                              is already hashed into a)
      }
      {
          a[$1]=$2              # hash to a
      }' file1 file2
      

      【讨论】:

      • 感谢它按预期工作,能否向我提供有关此脚本的详细信息,
      • 嗨詹姆斯,我面临一个问题,如果文件 2 有 2 行,如 44,oran 44,orange 然后我得到的结果如下:- 44,orange,oran 44,oran,orange。如果我们可以排除这些结果并将它们写入其他文件,这不是我的预期结果吗?
      • 当一个文件有2个相同的ID时,请将预期结果更新为原始示例。
      • 更新的file2请运行你的cmd,你可以看到描述
      • 当数据被重复ids索引时问题非常明显。问题是在这种情况下您的预期输出是什么?如果 file1 中有重复项,预期的输出是什么?文件2怎么样?如果两个文件都有重复怎么办?打印第一个条目?打印第二个条目?
      猜你喜欢
      • 2023-03-27
      • 2013-09-13
      • 2018-03-04
      • 1970-01-01
      • 2019-05-24
      • 2012-09-05
      • 2022-01-01
      • 2014-12-25
      • 2013-10-26
      相关资源
      最近更新 更多