Сортування файлу за першим, а потім другим стовпцем


13

Як я можу маніпулювати текстовим файлом, розділеним на вкладки двох стовпців, шляхом сортування за першим елементом другого стовпця (лише якщо перший елемент стовпця однаковий)?

Приклад:

Вхідний файл 1

A   1-2
A   6-8
A   3-4
B   7-10
B   5-9

Очікуваний вихід: Файл 2

A   1-2
A   3-4
A   6-8
B   5-9
B   7-10

Відповіді:


22

Використовуйте sort«сек -kваріанти , щоб сортувати по (кілька) стовпцями відразу:

$ sort -k1,1 -k2n input
A   1-2
A   3-4
A   6-8
B   5-9
B   7-10

-k1,1сортує за першим стовпцем спочатку, потім -k2nза другим¹ чисельно, коли перший стовпець прив’язується, тож ви отримуєте свій вихід у потрібному порядку: сортування за першим елементом другого стовпця, лише якщо перший елемент стовпця однаковий.

Під час сортування чисельно воно вивчить лише поле, поки воно не перестане бути числом, так що ви зможете зіставити лише перший елемент його.

Коли два клавіші порівнюють одне і те ж, то sortпорівнюють повні рядки лексично як порівняння в крайньому випадку. Наприклад, у A 1-10vs A 1-2, перші ключі однакові ( Aрядок), а також другий ключ (обидва трактуються як число 1), тож sortпорівнюється A 1-10проти A 1-2лексично, а останній більший за 2сортування після 1. Реалізація GNU sortмає -Vопцію або Vпрапор ключа для виконання сортування версій , що є подібним до лексичного порівняння, за винятком того, що послідовності десяткових цифр у рядках порівнюються чисельно, так sort -k1,1 -k2Vби сортували A 1-10після, A 1-2тому що 10як число більше, ніж число 2.


¹ технічно -k2означає частину рядка, що починається з другого поля (після першого переходу від порожнього до порожнього) і закінчується в кінці рядка, але з nпрапором, що еквівалентно -k2,2nлише провідної частини що є числом.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.