如何区分两个关键字列表?

时间:2019-05-28 10:42:09

标签: shell diff

我有两个文件的以下形状的版本信息:

$ cat file1
cabal 2.2.0.1
http 4000.3.12
hunit 1.6.0.0
only 0.1
...

我正在寻找(最好是简单的)使用命令行工具进行比较的方法,从而使我能够生成诸如 1. file1中所有未显示名称的行(file2) 2.格式为name <v1> <v2>的行,用于显示在两个文件中的名称

当我发现diff -y时,我以为我的成分正确,但这有时在同一行上使用不同的名称。

2 个答案:

答案 0 :(得分:1)

  1. file1中所有根本没有出现file2的行

需要GNU awk才能对结果进行排序。

$ gawk 'NR == FNR { packages[$1] = $0; next }
        { delete packages[$1] }
        END { PROCINF0["sorted_in"] = "@ind_str_asc";
              for (p in packages) print packages[p] }' file1 file2
  1. name <v1> <v2>形式的行,用于显示在两个文件中的名称

这需要在第一列上对文件进行排序。

$ join file1 file2

答案 1 :(得分:0)

这是我使用python提出的一个不足的解决方案:

> a = open('file1').read().splitlines()
> a = [l.split() for l in a]
> a = {k: v for (k, v) in a}
# same for b
> diff = {k: v for (k, v) in a.items() if k not in b}
> open('diff','w').write('\n'.join('{} {}'.format(k, v) for (k, v) in diff.items())