我有两个文件packages32.txt - packages64.txt,现在我想要文件之间的差异,所以我认为删除版本是更好的方法。
sys-libs/libseccomp-2.1.1
sys-libs/libunwind-1.1
sys-libs/libutempter-1.1.6-r1
sys-libs/mtdev-1.1.5
sys-libs/ncurses-6.0-r1
sys-power/upower-0.99.2-r1
sys-process/cronbase-0.3.3
sys-process/htop-1.0.3
sys-process/lsof-4.88-r1
我认为最好的想法是删除每一行的版本。有没有办法在linux上处理它?该文件有更多的条目,只有32个txt文件中的1500行。
感谢您的帮助&愉快的周末 西尔维奥
答案 0 :(得分:1)
你需要定义你想要的差异。设定差异不是可交换的。
例如
$ comm -23 <(sort file1) <(sort file2)
将给出设置差异File1 \ File2
(File1中的唯一条目),而
$ comm -13 <(sort file1) <(sort file2)
将设置差异File2 \ File2
一个真实的例子:
$ comm -23 <(echo -e 'a\nb\nc') <(echo -e 'c\nd\ne')
a
b
$ comm -13 <(echo -e 'a\nb\nc') <(echo -e 'c\nd\ne')
d
e
如果您想在没有版本号的情况下进行比较,首先需要修剪它们。根据上面的示例,看起来-[0-9]
是要看的模式。
$ f() { sed 's/-[0-9].*//' $1 | sort; }; comm <(f file1) <(f file2)
将为您提供三列,在file1中是唯一的,在file2中是唯一的,在file1和file2中是通用的。或者,使用上面提到的选项,您只能获得差异。
答案 1 :(得分:0)
diff -u <(sed 's/-[0-9].*$//' packages32.txt | sort) <(sed 's/-[0-9].*$//' packages64.txt | sort)
在将结果传递给sed
之前, -version
会删除每个文件的sort
部分。两个结果都转到diff
。 diff
仅在第一个文件(packages32.txt
)中以-
开头显示行,并仅在packages64.txt
开头的第二个文件(+
)中显示行