如何对字符串的一部分进行数字比较然后输出匹配的行?

如何对字符串的一部分进行数字比较然后输出匹配的行?

假设我有这些行要输入awk

dolly-cabinet-93-red
murfy-swan-96-white
chizzle-rock-115-green

如何选择-第三列最大(数值)的线并输出该线(最好使用awk,但不限于)?

不知何故,我认为 96 的解决方案是最大的。

答案1

我猜你正在做某种排序,并且这种排序是按字典顺序而不是数字顺序完成的,在这种情况下96将在之后排序115(因为9在之后1)。


awk -F '-' '$3 > max { max = $3; line = $0 } END { print line }' file

对于给定的数据,这将输出

chizzle-rock-115-green

该代码将第三个-分隔字段与当前找到的最大数字 ( max) 进行比较。如果字段的编号较大,max则使用该编号进行更新,并将当前输入行保存在line.最后,line打印 的内容。

这比排序稍微快一些,因为它是线性操作(排序最多是O(n*log(n))),但除非有大量数据,否则您不会注意到很大的差异。

答案2

sort使用+ 的替代方法head

sort -t'-' -k3nr file | head -1

输出:

chizzle-rock-115-green

相关内容