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

能否使用sort命令对双竖线分隔的CSV文件按多列排序

双竖线分隔CSV按指定两列排序实现方案

sort工具仅支持单字符作为字段分隔符,无法直接识别双竖线||做多字段排序,我们可以通过「预处理提取排序键+排序后剔除冗余字段」的流程实现需求,对400-500MB的文件处理效率足够,命令如下:

awk -F '\\|\\|' '{print $4 "\t" $17 "\t" $0}' abc.csv | sort -t $'\t' -k1,1 -k2,2 | cut -f3- > output.csv

命令各部分说明

  • awk -F '\\|\\|' '{print $4 "\t" $17 "\t" $0}' abc.csv:指定||为字段分隔符,将排序用的第4列、第17列提取到原行内容的最前面,三部分用制表符\t分隔
  • sort -t $'\t' -k1,1 -k2,2:指定制表符为分隔符,优先按第1个字段(原第4列)排序,再按第2个字段(原第17列)排序
  • cut -f3- > output.csv:切掉前两个排序用的冗余字段,只保留原行内容输出到结果文件

常见场景调整

  • 按数值排序:给sort的排序规则添加n参数,例如数值排序写法为sort -t $'\t' -k1,1n -k2,2n
  • 降序排序:给对应排序规则添加r参数,例如第4列降序、第17列升序写法为sort -t $'\t' -k1,1nr -k2,2
  • 原文件含制表符:将命令中所有\t替换为原文件不存在的罕见单字符即可,比如用不可见控制字符\x01,修改后命令为:
awk -F '\\|\\|' '{print $4 "\x01" $17 "\x01" $0}' abc.csv | sort -t $'\x01' -k1,1 -k2,2 | cut -d $'\x01' -f3- > output.csv

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 16:30:04