【问题标题】:awk Compare 2 files, print match and differenceawk 比较 2 个文件,打印匹配和差异
【发布时间】:2012-10-18 10:56:48
【问题描述】:

我需要比较两个文件 f1.txt 和 f2.txt 并获取匹配项和不匹配项,对于这种情况,我希望匹配两个文件上的第一个字段。并首先打印 f2.txt 的第二个字段,然后打印 f1.txt 的整行。如果在 f2.txt 上找不到匹配项,请声明“未找到”,然后打印 f1.txt 整行。

F1.txt

1;2;3;4;5;6;7;8
1a;2;3;4;5;6;7;8
1b;2;3;4;5;6;7;8
2b;2;3;4;5;6;7;8

F2.txt

1;First
1a;Firsta
1b;Firstb

期望的输出:

First;1;1;2;3;4;5;6;7;8
Firsta;1a;1a;2;3;4;5;6;7;8
Firstb;1b;1b;2;3;4;5;6;7;8
Not Found;2b;2;3;4;5;6;7;8

我可以得到匹配但不是不匹配

awk -F ";" -v OFS="";"" "NR==FNR{a[$1]=$2;next}a[$1]{print a[$1],$0}" f2.txt f1.txt

谢谢

【问题讨论】:

  • OFS 为什么要用双双引号?
  • @glennjackman 我正在使用 Windows Awk 版本,这是双引号的原因,问候

标签: text awk compare


【解决方案1】:

应该这样做:

awk -F";" 'NR==FNR{a[$1]=$2;next}{if (a[$1])print a[$1],$0;else print "Not Found", $0;}' OFS=";" f2.txt f1.txt

【讨论】:

  • @sarathi:你为什么要删除 OFS 并硬编码分号?有什么具体原因吗?
  • @Guru,我回滚到您的修订版。不过不要害怕空格,它极大地提高了可读性。
【解决方案2】:

这非常有用。 我进行了一些更改以获取 2 个文件之间的数据,并且每个文件中只有 1 列。

awk 'BEGIN { OFS=FS=";" } FNR==NR { array[$1]=$1; next } { print ($1 in array ? array[$1] : "Not Found"), $0 }' file1 file2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-10
    • 2019-06-24
    • 2019-11-11
    • 2021-06-15
    • 2016-07-30
    • 1970-01-01
    • 1970-01-01
    • 2012-10-18
    相关资源
    最近更新 更多