shell GNU/Linux上有不对称的diff选项或命令吗?

unftdfkk  于 12个月前  发布在  Shell
关注(0)|答案(2)|浏览(112)

是否有一个版本的diff运行

diff a.txt b.txt

并且仅示出了a.txt中不在b.txt中的行或a.txt中的行的修改版本的行。
(我正在运行GNU/Linux mint,但我认为这与此无关)

ygya80vv

ygya80vv1#

是的

diff --changed-group-format='%>' --unchanged-group-format='' /tmp/a /tmp/b
5kgi1eie

5kgi1eie2#

如果内容行是独立的,改变它们的排序顺序不会改变它们的含义,你可能希望使用comm而不是diffdiff做了额外的工作,memory-intensive试图构建最短的可能的变化(使用相当复杂的算法),而comm只是在两个输入之间一次比较一行(只有当这些输入被排序时才有可能)。
如果您的输入都是预先排序的,这可能看起来像:

# Extremely fast and memory-efficient
comm -23 a.txt b.txt

...否则,实时排序:

# Still faster than diff's worst-case, and supports processing content
# larger-than-memory, which diff doesn't.
comm -23 <(sort <a.txt) <(sort b.txt)

sort * 确实 * 需要与其输入大小相关的工作空间,但与diff不同的是,它能够将内容从RAM中移到临时文件中,并在RAM不足时通过合并排序将这些文件合并合并)。

相关问题