shell 如何按特定列对csv排序

fhity93d  于 2023-01-09  发布在  Shell
关注(0)|答案(2)|浏览(169)

我尝试按第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

正如你所看到的,第四列没有正确排序。我希望第一行是17.5,最后一行是16.7。
我也试过这个:

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

结果和前面的例子完全一样,谁能给我一点提示?

zaqlnxep

zaqlnxep1#

使用以下sort命令:

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-按逆序进行数字排序
yvfmudvl

yvfmudvl2#

虽然sort命令有一些技巧可以部分处理CSV文件,但它不能处理所有CSV格式的特性。csvsort是一个很好的选项:

csvsort -c 4 temperature.csv

相关问题