【发布时间】:2017-03-08 07:08:51
【问题描述】:
我正在比较两个 TSV 文件,它们是这样生成的包列表:
rpm -qa --qf "%{name}\t%{version}\t%{license}\n" | sort -n > packages
这会生成一个制表符分隔的文件,例如:
alsa-firmware 1.0.28 GPL+ and BSD and GPLv2+ and GPLv2 and LGPLv2+
alsa-lib 1.0.28 LGPLv2+
alsa-tools-firmware 1.0.27 GPLv2+
在另一个系统上,我正在运行相同的命令,其中安装了更多的软件包。我想要第二台服务器上这些附加软件包的列表。这里棘手的部分是我希望匹配列表不按版本过滤。 Comm 和 Diff 检查整行,我只想按第一个“列”过滤。
例如,如果第二台服务器具有以下软件包列表:
acl 2.2.51 GPLv2+
alsa-firmware 2.0.28 GPL+ and BSD and GPLv2+ and GPLv2 and LGPLv2+
alsa-lib 2.0.29 LGPLv2+
alsa-tools-firmware 2.0.27 GPLv2+
audit 2.4.1 GPLv2+
binutils 2.23.52.0.1 GPLv3+
我正在寻找一个命令(sed、awk、comm、diff 等),它将返回第一列的差异 - 在本例中为:
acl 2.2.51 GPLv2+
audit 2.4.1 GPLv2+
binutils 2.23.52.0.1 GPLv3+
请注意,alsa 软件包已更改版本,但仍具有相同的软件包名称。
【问题讨论】: