linux-如何按特定列对CSV文件排序?

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

>按第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

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

解决方法:

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

sort -t"," -k2,2 -k3,3n /tmp/test.csv

我使用逗号仅将顺序限制为该列,并使用数字(-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
上一篇:使用函数参数排序编号对PHP数组进行排序


下一篇:javascript-按其元素之一的值对动态生成的列表进行排序