You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux数字排序结果出现行错位,求解决方法

问题修正:按指定列数字排序时字段错位的解决方法

你遇到的问题根源是队名字段包含空格:执行sed "s/:/ /g"将所有冒号替换为空格后,原本的3列数据(SQUADRA、CATEGORIA、PUNTEGGIO)被拆分成了更多字段,导致sort -nrk 3实际是按非数字的字段(比如Serie)排序,完全偏离了按PUNTEGGIO列排序的预期。

方案1:保留冒号分隔符排序(最简便)

直接保留cut后的冒号分隔格式,排序时指定分隔符为冒号,避免字段内空格干扰列的识别:

cut -d: -f2,3,5 Citta.txt | (sed -u 1q; sort -t: -nrk3)

命令解释:

  • cut -d: -f2,3,5:提取第2、3、5列,用冒号作为分隔符
  • sed -u 1q:保留第一行表头不参与排序
  • sort -t: -nrk3:指定冒号为字段分隔符,按第3列(PUNTEGGIO)数字逆序排序

执行后输出符合预期:

SQUADRA:CATEGORIA:PUNTEGGIO
ASP:U18F:24
Tarquinia:U16F:22
VBC Viterbo:U12F:18
Montalto Montaggi:Serie DM:17
Montefiascone:U19M:00

方案2:输出用空格分隔(如需格式化输出)

如果希望最终输出用空格分隔字段,可以用awk处理,它能正确识别包含空格的字段:

awk -F: '
    NR==1 {print $2, $3, $5; next}
    {arr[$5] = $2 " " $3 " " $5}
    END {
        PROCINFO["sorted_in"] = "@val_num_desc"
        for (score in arr) print arr[score]
    }
' Citta.txt

效果:

表头和数据行用空格分隔,同时保证按PUNTEGGIO数字逆序排序:

SQUADRA CATEGORIA PUNTEGGIO
ASP U18F 24
Tarquinia U16F 22
VBC Viterbo U12F 18
Montalto Montaggi Serie DM 17
Montefiascone U19M 00

内容的提问来源于stack exchange,提问作者Flavio Costa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 02:56:13