我有两个文件的以下形状的版本信息:
$ 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
时,我以为我的成分正确,但这有时在同一行上使用不同的名称。
答案 0 :(得分: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
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())