LINUX.ORG.RU

Сортировка блоков текста по первой строке блока

 


0

1

Приветствую.

Есть группы строк, разделённые пустой строкой. Есть простой способ отсортировать эти группы строк по первой строке?

Перемещено leave из admin

★★★★★

#!/usr/bin/env python3
import sys
blocks = sys.stdin.read().split('\n\n')
trimmed_blocks = [b.rstrip() for b in blocks]
sorted_blocks = sorted(trimmed_blocks, key=lambda x: x.split('\n', 1)[0])
print('\n\n'.join(sorted_blocks))
$ cat text.txt 
bbbb
ololo

aaaa
ololo

$ cat text.txt | python3 sort.py
aaaa
ololo

bbbb
ololo
DuMOHsmol
()
def sort_blocks(text):
    blocks = text.strip().split('\n\n')  # Разделение блоков по пустой строке
    sorted_blocks = sorted(blocks, key=lambda x: x.split('\n')[0])  # Сортировка блоков по первой строке

    sorted_text = '\n\n'.join(sorted_blocks)  # Объединение отсортированных блоков обратно в текст
    return sorted_text

# Пример использования
text = """
Блок 3:
Это первая строка блока 3.
Это вторая строка блока 3.

Блок 1:
Это первая строка блока 1.
Это вторая строка блока 1.

Блок 2:
Это первая строка блока 2.
Это вторая строка блока 2.
"""

sorted_text = sort_blocks(text)
print(sorted_text)
targitaj ★★★★★
() автор топика
Ответ на: комментарий от targitaj
~
❯ text=$(cat <<EOF                                                                
Блок 3:
Это первая строка блока 3.
Это вторая строка блока 3.

Блок 1:
Это первая строка блока 1.
Это вторая строка блока 1.

Блок 2:
Это первая строка блока 2.
Это вторая строка блока 2.
EOF
)

~
❯ echo $text | python -c 'import sys;print("\n\n".join(sorted(sys.stdin.read().split("\n\n"))))'
Блок 1:
Это первая строка блока 1.
Это вторая строка блока 1.

Блок 2:
Это первая строка блока 2.
Это вторая строка блока 2.


Блок 3:
Это первая строка блока 3.
Это вторая строка блока 3.
uwuwuu
()