linux Shell sort按照指定列排序

本文详细介绍Linux下使用sort命令对特定格式文件进行排序的方法,包括如何指定分隔符、选择排序列及实现数字排序等高级用法。通过实例展示,帮助读者掌握sort命令的灵活运用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文本如下:
110,1|1,10
110,1|2,101
110,3|1,103
110,4|1,16
110,5|1,12
112,1|1,10
112,1|2,101
112,2|1,103
110,6|1,11
104,2|1,34
112,3|1,103
112,4|1,16
112,6|1,11
113,1|1,30
110,2|1,103
112,5|1,12

sort -t”,” -k 1n,1 -k 3rn,3 file.txt

排序结果:
[root@lzpm 0621]# sort -t “,” -k 1n,1 -k 3rn,3 file.txt
104,2|1,34
110,2|1,103
110,3|1,103
110,1|2,101
110,4|1,16
110,5|1,12
110,6|1,11
110,1|1,10
112,2|1,103
112,3|1,103
112,1|2,101
112,4|1,16
112,5|1,12
112,6|1,11
112,1|1,10
113,1|1,30

结果说明:
1.-t 指定文本分隔符
2.-k 指定排序列
3.-n 按数字进行排序
4.-r 翻转排序结果
上面的例子为按第一行正排序,按第三行反排序;

### 如何使用 Shell 命令对 CSV 文件按指定列排序Linux 或其他 Unix 系统中,`sort` 命令可以用来对 CSV 文件中的数据进行排序。为了实现这一目标,需要结合 `sort` 命令的参数来指定分隔符和排序。 以下是一个具体的例子,假设有一个名为 `data.csv` 的文件,内容如下: ```csv name,age,salary Alice,30,5000 Bob,25,6000 Charlie,35,4500 ``` 如果需要按照第二(`age`)升序排序,可以使用以下命令: ```bash sort -t ',' -k 2n,2 data.csv ``` - `-t ','`:指定逗号 `,` 作为字段分隔符[^1]。 - `-k 2n,2`:表示按照第二进行数值排序。 如果需要按照第三(`salary`)降序排序,则可以添加 `-r` 参数: ```bash sort -t ',' -k 3nr,3 data.csv ``` - `-3nr,3`:表示按照第三进行数值降序排序[^1]。 如果希望去除重复行并保留唯一值,可以添加 `-u` 参数: ```bash sort -t ',' -k 2n,2 -u data.csv ``` 此外,如果需要将排序结果保存到另一个文件中,可以使用重定向符号 `>`: ```bash sort -t ',' -k 2n,2 data.csv > sorted_data.csv ``` 对于更复杂的场景,例如遍历目录中的所有 CSV 文件并对每个文件按指定列排序,可以参考以下脚本[^2]: ```bash #!/bin/sh list_alldir() { for file2 in `ls -a $1` do if [ x"$file2" != x"." -a x"$file2" != x".." ]; then if [ -d "$1/$file2" ]; then echo "$1/$file2" list_alldir "$1/$file2" else # 按照第二和第三升序排序,并将结果保存到指定目录 sort -t ',' -k 2n,2 -k 3n,3 "$1/$file2" >> "E:\\testDataTo\\${file2}" fi fi done } # 遍历 E:\testData 目录下的所有文件 list_alldir "E:\\testData" ``` 此脚本会递归遍历指定目录中的所有文件,并对每个 CSV 文件按第二和第三升序排序,最后将结果保存到指定目录[^2]。 ### 注意事项 如果指定的文件不存在或为空,`sort` 命令会从标准输入读取数据。如果字段数不足,`sort` 命令会忽略该行。 ### 示例代码总结 以下是对 CSV 文件按指定列排序的完整示例: ```bash # 按第二升序排序 sort -t ',' -k 2n,2 data.csv # 按第三降序排序 sort -t ',' -k 3nr,3 data.csv # 去重并按第二升序排序 sort -t ',' -k 2n,2 -u data.csv ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值