AIX 6.1系统无-k参数多优先级sort命令语法与逻辑问询
AIX 6.1 传统sort命令语法解析(针对
sort -t"_" +4 -5 +0 -1 +1 -2 +2 -3 +6 -8 file.list) 基础概念:+n -m参数的含义
在AIX 6.1的老旧sort版本中,没有后来的-k参数,而是用+n和-m结合-t分隔符指定排序字段:
-t"_":指定下划线_为字段分隔符,将每行文本分割为多个字段,字段索引从0开始计数(第一个字段是0,第二个是1,依此类推)。+n:表示排序键从第n个字段的开头开始。-m:表示排序键到第m个字段的开头结束(即排序键包含第n到第m-1个字段的全部内容;若省略-m,排序键从第n个字段一直延伸到行尾)。
你的命令的排序键拆解
命令中的多组+n -m按顺序指定排序优先级,第一组是最高优先级,后续组优先级依次降低:
- 第一优先级(最高):
+4 -5→ 仅提取第4个字段作为排序键(从第4个字段开始,到第5个字段前结束,即只取第4字段的全部内容)。 - 第二优先级:
+0 -1→ 提取第0个字段(第一个字段)作为排序键。 - 第三优先级:
+1 -2→ 提取第1个字段作为排序键。 - 第四优先级:
+2 -3→ 提取第2个字段作为排序键。 - 第五优先级(最低):
+6 -8→ 提取第6、7两个字段的组合作为排序键(从第6个字段开始,到第8个字段前结束,包含第6、7字段的全部内容)。
排序逻辑与结果生成原理
sort的执行流程如下:
- 读取
file.list的每一行,用_分割为字段数组。 - 为每行提取所有优先级的排序键,按优先级顺序存储。
- 按**默认升序(ASCII字典序)**比较每行的排序键:
- 先比较第一优先级的键,键值小的行排在前面;
- 若第一优先级键相同,则比较第二优先级的键;
- 以此类推,直到所有优先级的键比较完成,或分出顺序。
- 最终按比较后的顺序输出所有行。
举个实际例子,假设file.list有两行:
zoo_ant_bear_cow_dog_bee_fish_goat_horse apple_banana_cat_dog_elephant_fox_grape_honey_iguana
分割后的字段分别是:
行1字段:0:zoo,1:ant,2:bear,3:cow,4:dog,5:bee,6:fish,7:goat,8:horse
行2字段:0:apple,1:banana,2:cat,3:dog,4:elephant,5:fox,6:grape,7:honey,8:iguana
第一优先级键是字段4:dog vs elephant,dog的ASCII顺序更小,所以行1会排在行2前面。如果有两行的字段4相同,再比较字段0,以此类推。
内容的提问来源于stack exchange,提问作者Sethnico
相关产品推荐
相关产品推荐

