Я собираюсь сделать два упрощающих предположения:
- Описания - только одна строка.
- Вы можете идентифицировать символ, который не появляется в описаниях или идентификаторах. Я буду использовать вкладку для этого персонажа.
Ни одно из предположений не является очень сильным, поэтому при необходимости не составит труда адаптировать следующее.
С этими допущениями я приведу пример данных с printf "1\n\nitem 1\n\n2\n\nitem 2\n\n3\n\nitem 2\n\n4\n\nitem 1\n"
. Это выглядит так:
1
item 1
2
item 2
3
item 2
4
item 1
Для обработки этих данных я:
- Избавьтесь от пустых строк
- Объединение последовательных строк, разделяющих идентификатор и описание вкладкой
- Сортировать новые строки по полю описания
- Форматирование отсортированных строк в таблицу
Вот конвейер, который это делает:
grep -v '^[[:space:]]*$' |
awk 'NR%2 { printf("%s\t", $0) } !(NR%2)' |
sort -k2 |
awk -F"\t" 'desc != $2 { printf("-----\n%s\n", $2); desc = $2} { print $1 }'
Передайте образец данных через него, и вы получите
-----
item 1
1
4
-----
item 2
2
3