我有几个包列表,其中有数百个条目,我想找出它们之间的区别。
文件的内容看起来像
文件1:
somepackage1 0.1
somepackage2 5.6
somepackage3 1.3-1
etc...
文件2:
somepackage1 0.1
somepackage2 5.7
somepackage3 1.3-1
somepackage4 0.1
etc...
我正在寻找几个命令或脚本,可以生成所有添加的新包。不仅是版本号,而且如果添加了新的软件包。
因此,例如,给定上面两个文件,命令或脚本将输出somepackage4
。
我一直在玩一些命令,但没有一个能正常工作。有人有办法做到这一点吗?
您似乎想要比较文件中的第一列,并打印第二列中唯一的行。使用comm
:
comm -13 <(awk '{print $1}' file1 | sort) <(awk '{print $1}' file2 | sort)
对于你的输入,它会产生:
somepackage4
您可以使用grep
在文件2中查找列出的包,但不能在文件1 中查找
grep -vf <(cut -d' ' -f1 file1) <(cut -d' ' -f1 file2)
使用awk
awk 'NR==FNR{a[$1];next}!($1 in a){print $1}' file1 file2