bash - 如何按特定列对 csv 进行排序

标签 bash shell csv sorting

我尝试按第 4 列对包含温度的 csv 进行排序。

Sort -n -k4 temperature.csv

结果我得到了这个:

2017-06-24 11:20,23.57,19.0,16.7,0.087,3.615
2017-06-24 11:25,23.51,19.0,16.7,0.087,3.689
2017-06-24 12:45,22.03,19.0,17.1,0.096,4.152
2017-06-24 13:00,21.92,19.0,17.1,0.096,4.229
2017-06-24 14:00,22.22,19.0,17.4,0.197,4.639
2017-06-24 14:25,22.21,19.0,17.5,0.197,4.774
2017-06-24 15:10,22.30,19.0,17.1,0.134,5.472
2017-06-24 16:00,22.42,19.0,17.3,0.134,5.93
2017-06-24 17:45,22.07,21.0,17.0,0.144,6.472
2017-06-24 18:25,21.90,21.0,16.9,0.15,6.814
2017-06-24 19:40,23.01,21.0,16.9,0.318,8.503

如您所见,第 4 列未正确排序。我预计第一行为 17.5,最后一行为 16.7。

我也试过这个:

sort -n -t. -k4,1n temperature.csv

结果与前面的例子完全一样。 谁能给我一个提示?

最佳答案

使用下面的排序命令:

sort -t, -k4,4 -nr temperature.csv

输出:

2017-06-24 14:25,22.21,19.0,17.5,0.197,4.774
2017-06-24 14:00,22.22,19.0,17.4,0.197,4.639
2017-06-24 16:00,22.42,19.0,17.3,0.134,5.93
2017-06-24 15:10,22.30,19.0,17.1,0.134,5.472
2017-06-24 13:00,21.92,19.0,17.1,0.096,4.229
2017-06-24 12:45,22.03,19.0,17.1,0.096,4.152
2017-06-24 17:45,22.07,21.0,17.0,0.144,6.472
2017-06-24 19:40,23.01,21.0,16.9,0.318,8.503
2017-06-24 18:25,21.90,21.0,16.9,0.15,6.814
2017-06-24 11:25,23.51,19.0,16.7,0.087,3.689
2017-06-24 11:20,23.57,19.0,16.7,0.087,3.615

  • -t, - 字段分隔符

  • -k4,4 - 仅按第 4 个字段排序

  • -nr - 按相反顺序对数字进行排序

关于bash - 如何按特定列对 csv 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44744779/

相关文章:

linux - 如何在禁用 tty 时输出子 shell

linux - 用 bash 编写脚本解释器

regex - 如何编写验证字母数字和空格的正则表达式

linux - 无法在 debian 8 中使用服务命令 (Jessie)

php - sh: 2: 1: 未找到 - 将多个 php 参数传递给 bash 脚本

bash - 在 shell 脚本中,冒号 ( :) is being treated as a operator for variable creation

ruby 数据提供者?

python - pandas:read_csv仅排除某些行

spring - 从浏览器上传 csv 的 MultipartFile 读取数据

linux - 在 Bash 中添加/平均多个变量