排序或唯一命令 bash

sort or unique command bash

这是一个文件。我想删除补丁名称中的重复

[ppande@server-1 —]$egrep 'Patch[0-9].*.*:' content1
Patch1001 : snmp fixl.org
Patch1002 : dhcp tmp fix
Patch1003 : qemu-img-9.0.58
Patch001 : snmp fixl.org
Patch002 : dhcp installation
Patch003 : qemu
Patch004 : snmp fixl.org

我用的是'sort -u'但是这里补丁的顺序变了。我需要的只是没有重复且顺序保持不变的输出,或者换句话说,如果有重复,则不能显示 second/last 出现。

[ppande@server-1 —]$egrep 'Patch[0-9].*.*:' content1 | sort -u -k3
Patch002 : dhcp installation
Patch1002 : dhcp tmp fix
Patch003 : qemu
Patch1003 : qemu-img-0.0.58
Patch1001 : snmp fixl.org
Patch001 : snmp fixl.org

期望的输出:

Patch1001 : snmp fixl.org
Patch1002 : dhcp tmp fix
Patch1003 : qemu-img-9.0.58
Patch002 : dhcp installation
Patch003 : qemu

您可以在一个 awk 命令中完成。

awk -F ':\s*' '/^Patch[0-9]+\s*:/ && !a[]++' content1

编辑: 因为 oguzismail 在我之前几秒钟添加了相同的解决方案,所以如果你同意的话,现在添加 perl 解决方案。

perl -aF': ' -lne 'print if ! $seen{$F[1]}++'  Input_file


能否请您尝试以下。您不需要在此处将多个命令与 awk 一起使用。

awk -F': '  '/Patch[0-9].*.*/ && !a[]++'  Input_file