
У меня есть куча строк (около ~300), и все они состоят из 4 букв, поэтому
XYZA, ZHF3, RTt2 etc.
я хочу отсортировать их в зависимости от двух требований.
- Отсортируйте их в порядке последних 2 букв.
- Отсортируйте слова, которые содержат одинаковые 2 последние буквы, в зависимости от первых 2 букв.
Это значит, что у меня есть строки в формате XXYY, и я хочу отсортировать их по указанным правилам.
Я пытаюсь это сделать, sort -k.1.3,1.4
но те, у которых это так, сортируются случайным образом, например: 15AA, a2AA, 0CAA etc.
Как мне от этого избавиться?
решение1
-k
может использоваться более одного раза. Если есть несколько ключевых полей, последующие ключи сравниваются только после того, как все предыдущие ключи будут признаны равными.
<datafile sort -k 1.3,1.4 -k 1.1,1.2
И помните, сортировка зависит от LC_COLLATE
.
решение2
Выполните операции в обратном порядке – сначала отсортируйте попервые двабуквы, а затем последние две. Я думаю, что можно даже сделать так:
cat file | sort | sort -k 1.3 -s
Команда sort
может выполнитьстабильныйсортировка, т.е. если две строки "равные", она сохранит их относительный порядок друг к другу. Таким образом, на втором этапе строки с одинаковыми 3-й и 4-й буквами удобно сохранят свой порядок с первого этапа.