Сортировка строк в файле по 2 ключам с переменным текстом

Я – администратор баз данных, и у меня есть вывод процесса генерации реорга, который дает мне DML в следующем формате:

 REORG TABLE SCHEMA.A некоторые другие параметры REORG TABLE SCHEMA.B некоторые другие параметры REORG TABLE SCHEMA.C некоторые другие параметры REORG TABLE SCHEMA.D некоторые другие параметры REORG ИНДЕКСИРУЮТ ВСЕ ДЛЯ ТАБЛИЦЫ SCHEMA.A некоторые другие параметры REORG ИНДЕКСУЮТ ВСЕ ДЛЯ ТАБЛИЦЫ SCHEMA. B некоторые другие параметры REORG INDEXES ALL ДЛЯ TABLE SCHEMA.C некоторые другие параметры REORG INDEXES ALL ALL для TABLE SCHEMA.D некоторые другие параметры RUNSTATS ON TABLE SCHEMA.A некоторые другие параметры RUNSTATS ON TABLE SCHEMA.B некоторые другие параметры RUNSTATS ON TABLE SCHEMA.C некоторые другие параметры RUNSTATS ON TABLE SCHEMA.D некоторые другие параметры 

По причинам, по которым я не буду здесь вдаваться, мне нужно, чтобы этот файл был отсортирован в следующем порядке (обратите внимание, что может быть меньше или больше 4 таблиц, или меньше или больше 3 записей на таблицу):

 REORG TABLE SCHEMA.A
 РЕОРГ ИНДЕКСЫ ВСЕ ДЛЯ ТАБЛИЦЫ SCHEMA.A
 RUNSTATS НА ТАБЛИЦЕ SCHEMA.A
 REORG TABLE SCHEMA.B
 РЕОРГ ИНДЕКСЫ ВСЕ ДЛЯ ТАБЛИЦЫ SCHEMA.B
 RUNSTATS НА ТАБЛИЦЕ СХЕМЫ.
 ...так далее

то есть. REORG TABLES, REORG INDEX затем RUNSTAT для каждой таблицы в файле.

Я пробовал следующее (плюс варианты):

 сортировать  -k2 test.fil
 сортировать  -k2.1,2.8 -k1.1,1.7 test.fil

но проблема, кажется, в том, что вторичная сортировка (REORG TABLE, REORG INDEX затем RUNSTAT) работает правильно.

Первая приведенная выше команда сортировки получает объекты в порядке убывания имени таблицы, затем сортируется по длине k2.

Вторая команда сортировки не учитывает тот факт, что TABLE идет после INDEX (T после I) в алфавите, но мне нужен INDEX после Table.

Любой гуру, который может помочь, высоко ценится. Может быть, есть другие команды awk и linux, которые можно использовать вместе?

Я также прошел через параметры команды сортировки, может быть, некоторые из них я пропустил.

Давайте awk сценарий awk который изменяет ваши данные, чтобы их можно было легко сортировать так, как вы хотите, чтобы они были отсортированы:

 BEGIN { OFS = "\t" } # set output delimiter to a tab /REORG TABLE/ { $0 = 1 OFS $0 } # prefix line with 1 for this op. /REORG INDEX/ { $0 = 2 OFS $0 } # with 2 /RUNSTATS/ { $0 = 3 OFS $0 } # with 3 # prefix line with schema name (unconditionally) { match($0,"SCHEMA\.[^ ]*"); $0 = substr($0,RSTART,RLENGTH) OFS $0 } # output modified line { print } 

Этот скрипт awk добавит в каждую строку два значения, разделенных табуляцией:

  1. Имя схемы, например, SCHEMA.A .
  2. Шаг, на котором выполняется эта операция для этой схемы, которая является целым числом 1, 2 или 3.

Запуск его на ваших данных:

 $ awk -f script.awk file SCHEMA.A 1 REORG TABLE SCHEMA.A some other options SCHEMA.B 1 REORG TABLE SCHEMA.B some other options SCHEMA.C 1 REORG TABLE SCHEMA.C some other options SCHEMA.D 1 REORG TABLE SCHEMA.D some other options SCHEMA.A 2 REORG INDEXES ALL FOR TABLE SCHEMA.A some other options SCHEMA.B 2 REORG INDEXES ALL FOR TABLE SCHEMA.B some other options SCHEMA.C 2 REORG INDEXES ALL FOR TABLE SCHEMA.C some other options SCHEMA.D 2 REORG INDEXES ALL FOR TABLE SCHEMA.D some other options SCHEMA.A 3 RUNSTATS ON TABLE SCHEMA.A some other options SCHEMA.B 3 RUNSTATS ON TABLE SCHEMA.B some other options SCHEMA.C 3 RUNSTATS ON TABLE SCHEMA.C some other options SCHEMA.D 3 RUNSTATS ON TABLE SCHEMA.D some other options 

Это облегчает поиск ключей сортировки для sort .

Это может быть отсортировано и новые столбцы могут быть удалены:

 $ awk -f script.awk file | sort | cut -f 3- REORG TABLE SCHEMA.A some other options REORG INDEXES ALL FOR TABLE SCHEMA.A some other options RUNSTATS ON TABLE SCHEMA.A some other options REORG TABLE SCHEMA.B some other options REORG INDEXES ALL FOR TABLE SCHEMA.B some other options RUNSTATS ON TABLE SCHEMA.B some other options REORG TABLE SCHEMA.C some other options REORG INDEXES ALL FOR TABLE SCHEMA.C some other options RUNSTATS ON TABLE SCHEMA.C some other options REORG TABLE SCHEMA.D some other options REORG INDEXES ALL FOR TABLE SCHEMA.D some other options RUNSTATS ON TABLE SCHEMA.D some other options