删除文件

时间:2016-01-29 22:13:22

标签: bash shell x86 x86-64 gentoo

我有两个文件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行。

感谢您的帮助&愉快的周末 西尔维奥

2 个答案:

答案 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部分。两个结果都转到diffdiff仅在第一个文件(packages32.txt)中以-开头显示行,并仅在packages64.txt开头的第二个文件(+)中显示行