Bash: порядок столбцов внутри групп? - PullRequest
1 голос
/ 19 октября 2019

У меня есть таблица csv, которая содержит несколько тысяч строк, например:

Column 1, Column 2, Column 3, Column 4
Bla Bla, 1, 100, Bla bla
Bla Bla, 4, 2000, Bla bla
Bla Bla, 10, 63, Bla bla
Bla Bla, 1, 340, Bla bla
Bla Bla, 2, 65, Bla bla
Bla Bla, 4, 100, Bla bla
Bla Bla, 10, 10, Bla bla
Bla Bla, 2, 100, Bla bla
Bla Bla, 10, 99, Bla bla
Bla Bla, 1, 210, Bla bla
Bla Bla, 2, 1000, Bla bla

Я хотел бы заказать два столбца через bash в терминале (в macOS, если это имеет значение).

a) Второй столбец должен быть упорядочен по номерам 1, 2, 4 и т. Д. И соответствующая строка с ним, например:

Column 1, Column 2, Column 3, Column 4
Bla Bla, 1, 100, Bla bla
Bla Bla, 1, 340, Bla bla
Bla Bla, 1, 210, Bla bla
...

b) На втором этапе третий столбец долженбыть упорядочены численно в пределах группы, в которой они находятся. Например, все ячейки должны быть упорядочены в пределах группы 1, затем 2 и т. д., конечный результат (в моем примере должен выглядеть следующим образом:

Column 1, Column 2, Column 3, Column 4
Bla Bla, 1, 100, Bla bla
Bla Bla, 1, 210, Bla bla
Bla Bla, 1, 340, Bla bla
Bla Bla, 2, 65, Bla bla
Bla Bla, 2, 100, Bla bla
Bla Bla, 2, 1000, Bla bla
Bla Bla, 4, 100, Bla bla
Bla Bla, 4, 2000, Bla bla
Bla Bla, 10, 10, Bla bla
Bla Bla, 10, 99, Bla bla
Bla Bla, 10, 63, Bla bla

Как это может бытьготово?

Редактировать:

Я попытался sort -k2,2 input.csv | sort -k 3,3 > output.csv. Однако выход снова перемешивает группы в столбце 2, в то время как третий столбец правильно упорядочен.

1 Ответ

2 голосов
/ 19 октября 2019
# write only header to new_file
head -n 1 file > new_file

# sort file without header (with GNU tail) and append to new_file
tail -n +2 file | sort -t ',' -k 2n -k 3n >> new_file

Вывод на new_file:

Column 1, Column 2, Column 3, Column 4
Bla Bla, 1, 100, Bla bla
Bla Bla, 1, 210, Bla bla
Bla Bla, 1, 340, Bla bla
Bla Bla, 2, 65, Bla bla
Bla Bla, 2, 100, Bla bla
Bla Bla, 2, 1000, Bla bla
Bla Bla, 4, 100, Bla bla
Bla Bla, 4, 2000, Bla bla
Bla Bla, 10, 10, Bla bla
Bla Bla, 10, 63, Bla bla
Bla Bla, 10, 99, Bla bla

См .: man sort

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...