Как можно отсортировать строки с более чем одним предварительным требованием?

Как можно отсортировать строки с более чем одним предварительным требованием?

У меня есть куча строк (около ~300), и все они состоят из 4 букв, поэтому XYZA, ZHF3, RTt2 etc.я хочу отсортировать их в зависимости от двух требований.

  1. Отсортируйте их в порядке последних 2 букв.
  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-й буквами удобно сохранят свой порядок с первого этапа.

Связанный контент