Linux Sort能否对混合值列进行排序?附程序输出示例
用Linux
sort命令对混合值列排序的方案 当然可以!Linux的sort命令灵活性拉满,完全能处理你这种包含混合格式值的列排序需求。针对你给出的输出内容,我们可以根据不同的排序目标(比如按测试规格、按耗时)来定制命令,下面给你详细拆解:
先明确你的输出格式
你的每一行输出结构大致是:
0: test_func() [规格字段] [耗时数值]
比如典型行:0: test_func() 4x1024 0.2260167
这里用空格分隔字段,第4个字段是4x1024这类混合规格,第5个字段是浮点型的耗时数值。
方案1:按耗时数值排序(最简单的场景)
如果想按最后的耗时从小到大(或从大到小)排序,直接用sort的数值排序选项-n,指定第5列作为排序键即可:
从小到大排序
sort -k5n your_output.txt
从大到小排序(加反向选项-r)
sort -k5nr your_output.txt
运行后你会看到耗时最短的0: test_func() 4x64 0.004869排在最前面(升序),或者最长的0: test_func() 16x8192 ...排在最前面(降序)。
方案2:按混合规格字段(如4x64)排序
如果想按4x64这类混合值排序,需要拆分这个字段的两个数字部分:先按x前面的数字(比如4、16)排序,再按x后面的数字(比如64、128)排序。这里可以通过指定字段的子字符范围来实现:
按规格升序排序
sort -k4.1n -k4.3n your_output.txt
命令解释:
-k4.1n:以第4个字段的第1个字符开始的数字(也就是x前面的部分)作为第一排序键,按数值排序-k4.3n:以第4个字段的第3个字符开始的数字(也就是x后面的部分)作为第二排序键,按数值排序
排序后的结果会先把所有4x开头的行按后面的数字从小到大排(4x64 → 4x128 → 4x256 ...),再排16x开头的行,完全符合规格的递增逻辑。
进阶技巧
- 如果要去重相同的行,在命令末尾加
-u选项 - 如果需要稳定排序(保持原输出中相同排序键的行的相对顺序),加
-s选项 - 如果你想同时按规格和耗时排序,可以叠加多个
-k参数,比如先按规格升序,再按耗时升序:sort -k4.1n -k4.3n -k5n your_output.txt
内容的提问来源于stack exchange,提问作者bad code
相关产品推荐
相关产品推荐

