2016-01-29 70 views
1

我有兩個文件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中通用。或者,使用上面提到的選項,您只能獲得差異。

+0

你好,謝謝你的回答。我希望在那裏有兩個文件只有sys-libs/libseccomp sys-libs/libunwind,那麼我可以更好地看到安裝了什麼,以及什麼不在amd64樹上。 Gentoo amd64和x86通常只在其他版本中安裝相同的軟件。當版本離開時,我可以更好地看到需要安裝什麼,什麼不需要。 – Silvio

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)中顯示行,從+開始。

+0

非常感謝你的幫助。從本週開始... – Silvio