Я использую Unix для сортировки файла с разделителями-запятыми с несколькими столбцами. До сих пор это отлично работало для сортировки данных по номерам или по алфавиту:
Файл примера перед любой сортировкой:
C,United States,WA,Tacoma,f,1
A,United States,MA,Boston,f,0
B,United States,NY,New York,f,5
A,Canada,QC,Montreal,f,2
A,Bahamas,Bahamas,Nassau,f,2
A,United States,NY,New York,f,1
Сортировать файл: $ sort -t ',' -k 2,2 -k 3,3 -k 4,4 -k 5,5r -k 6,6nr tmp.csv
Сортированный результат:
A,Bahamas,Bahamas,Nassau,f,2
A,Canada,QC,Montreal,f,2
A,United States,MA,Boston,f,0
B,United States,NY,New York,f,5
A,United States,NY,New York,f,1
C,United States,WA,Tacoma,f,1
Вот проблема: я хочу отсортировать столбец 2 на основе пользовательской сортировки, что означает, что я хочу сначала Соединенные Штаты, затем Канаду, а затем Багамские острова:
Желаемый вид:
A,United States,MA,Boston,f,0
B,United States,NY,New York,f,5
A,United States,NY,New York,f,1
C,United States,WA,Tacoma,f,1
A,Canada,QC,Montreal,f,2
A,Bahamas,Bahamas,Nassau,f,2
Есть ли способ передать unix sort пользовательский порядок сортировки, который затем можно применить? Что-то вроде:
$ sort -t ',' -k 2,2:'United States, Canada, Bahamas' -k 3,3 -k 4,4 -k 5,5r -k 6,6nr tmp.csv
Спасибо!
t
вместо f
последней строки?
join
команда, но вы можете получить много сортировок: входные файлыjoin
должны быть отсортированы в одном порядке, а затем выsort
снова будете использовать их для помещения данных в другой порядок (и потеря столбца порядка сортировки как шаг после сортировки).