2016-01-15 4 views
3

Я хочу, чтобы сортировать CSV как последовать за то, что я хочуКак отсортировать 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 

этот результат странно, он сортирует по столбцу три, а затем на колонке 2

+0

Возможный дубликат [Сортировка нескольких клавиш с Unix рода] (http://stackoverflow.com/questions/357560/sorting-multiple-keys-with-unix-sort) – Evert

+0

[Второй ответ] (http://stackoverflow.com/a/6709427/707650) дубликата имеет необходимое решение. – Evert

ответ

3

Эта команда, кажется, чтобы получить правильный вывод:

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 
Смежные вопросы