如何按特定列对 CSV 文件进行排序?

rog*_*ger 7 linux csv sorting

我想按如下方式对 csv 进行排序,我想要的是

  1. 按第 2 列排序
  2. 如果列相同,则按第 3 列(数字)排序

这就是我所做的:

$ sort  -t","  -k2 -nk3  /tmp/test.csv
55b64670abb9c0663e77de84,525e3bfad07b4377dc142a24:9999,0.081032
5510b33ec720d80086865312,525e3bfad07b4377dc142a24:9999,0.081033
55aca6a1d2e33dc888ddeb31,525e3bf7d07b4377d31429d2:2,0.081034
55aca6a1d2e33dc888ddeb31,525e3bf7d07b4377d31429d2:2,0.081034
5514548ec720d80086bfec46,525e3bfad07b4377dc142a24:9999,0.081035
551d4e21c720d80086084f45,525e3bfad07b4377dc142a24:9999,0.081036
557bff5276bd54a8df83268a,525e3bfad07b4377dc142a24:9999,0.081036
Run Code Online (Sandbox Code Playgroud)

这个结果很奇怪,它首先按第三列排序,然后按第二列排序

Bir*_*rei 7

该命令似乎产生正确的输出:

sort -t"," -k2,2 -k3,3n /tmp/test.csv
Run Code Online (Sandbox Code Playgroud)

我使用逗号仅限制该列的顺序,并使用数字 ( -n) 开关切换到第三列中的最后一个字符。

它产生:

55aca6a1d2e33dc888ddeb31,525e3bf7d07b4377d31429d2:2,0.081034
55aca6a1d2e33dc888ddeb31,525e3bf7d07b4377d31429d2:2,0.081034
55b64670abb9c0663e77de84,525e3bfad07b4377dc142a24:9999,0.081032
5510b33ec720d80086865312,525e3bfad07b4377dc142a24:9999,0.081033
5514548ec720d80086bfec46,525e3bfad07b4377dc142a24:9999,0.081035
551d4e21c720d80086084f45,525e3bfad07b4377dc142a24:9999,0.081036
557bff5276bd54a8df83268a,525e3bfad07b4377dc142a24:9999,0.081036
Run Code Online (Sandbox Code Playgroud)