我在一个文件中有以下数据,并且我只想打印列表中连字符 (-) 后的最高值
输入:
4.1-1
4.1
4.0-2
4.0-1
4.0
3.14-2
3.14-1
3.14
3.13.-1
3.13
3.12
3.11-2
3.11-1
3.11
输出应该是
4.1-1
4.0-2
3.14-2
3.13.-1
3.12
3.11-2
我尝试过下面
awk -F'-' '/-/{print $2}' <<EOF | sort -n | tail -n 1
4.1-1
4.1
4.0-2
4.0-1
4.0
3.14-2
3.14-1
3.14
EOF
它没有给出想要的输出,基本上我想要唯一的标签和带有连字符最高值的标签
3.13-1
3.13
3.12
3.11-2
3.11-1
3.11
因此它应该只打印 3.13-1(它是 3.13 中的最高值,因为 3.12 是唯一的,所以它应该打印 3.11-2(因为它是 3.11 中的最高值),如下所示
3.13-1
3.12
3.11-2
你能指导我如何在 Unix 中实现瘦身吗?
问候
如果输入像这样排序,每个初始部分(破折号之前)的“最高”值首先出现,那么如果初始部分与最后一行不同,则可以简化为仅打印该行:
(从你的描述中我无法判断为什么
3.13
应该从输出中排除,它是唯一一个给出的初始部分3.13.-1
有一个额外的点。)如果不是这种情况,您可以收集最高的第二部分和相应的整行,并在最后打印它们。由于 AWK 中数组的工作方式,这可能会混淆输出顺序,因此您需要在之后对其进行排序:
使用 GNU
sort
或兼容: