MacBook M1 Pro下sort命令按百分比排序失效问题排查
问题原因与解决方案
你的排序命令未按百分比列生效,核心问题是排序字段指定错误:
- 你用
-t ':'将冒号作为字段分隔符,每行被拆分为3个字段:- 第一个字段:
4.1、4这类alpha0值 - 第二个字段:
===> TOTAL(固定字符串,所有行完全一致) - 第三个字段:
89.120%这类带百分号的百分比数值
- 第一个字段:
你指定-k 2是对固定不变的第二个字段排序,自然无法按百分比排序,最终结果是默认的整行字典序——这也是你看到4、5、6排在同区间小数行之后的原因(字典序中纯数字字符串会比带小数点的同前缀字符串靠后)。
解决方法1:直接修正sort的字段与格式(GNU sort适用)
调整sort参数,指定第三个字段为排序键,并去掉百分号让sort识别为数字:
for alpha0 in $(seq 4 0.1 6) ; do echo -n "$alpha0: "; scripts/run_vad.sh $alpha0 | grep TOTAL; done | sort -t ':' -k 3,3 -n --key-transform='s/%$//'
-k 3,3:明确只对第三个字段排序--key-transform='s/%$//':去掉字段末尾的%符号,确保sort按数值排序
解决方法2:用awk预处理后排序(兼容macOS BSD sort)
macOS默认的BSD sort没有--key-transform参数,可先用awk提取百分比到行首,排序后再还原原内容:
for alpha0 in $(seq 4 0.1 6) ; do echo -n "$alpha0: "; scripts/run_vad.sh $alpha0 | grep TOTAL; done | awk -F: '{print $3, $0}' | sort -n | cut -d' ' -f2-
awk -F: '{print $3, $0}':把百分比字段($3)放到行首,后面跟上原行内容sort -n:按行首的数值排序cut -d' ' -f2-:去掉行首的百分比,还原原输出格式
内容的提问来源于stack exchange,提问作者Jordi Matamala
相关产品推荐
相关产品推荐

