Текстовый файл вида блоков

Существует много инструментов, которые отсортируют текстовый файл при условии, что единица интереса является строкой, но является там какой-либо той работой над блоками?

Пример:

name = Mercury
order = 1
mass = 0.06

name = Venus
order = 2
mass = 0.82

name = Earth
order = 3
mass = 1

Существует ли инструмент, который отсортировал бы список планет дополнительно по имени, массы или порядка от солнца, беря в качестве входа и произведя, как произведено текстовый файл с каждой записью, являющейся блоком как вышеупомянутое?

1
задан 09.04.2017, 14:32

1 ответ

Для файлов, которые вписываются в память, Вы могли использовать Perl, можно определить входной разделитель записей.

 perl -e '$/="\n\n"; print sort <>' t.txt

Если файл является слишком большим для памяти, но у Вас есть равное количество свободного пространства на диске, можно сделать три вида шага:

  • используйте жемчуг для слияния строк каждой записи
  • вид
  • используйте жемчуг для разделения строк каждой записи

К виду значением одного из атрибутов я считал бы данные в подходящую структуру данных, такую как массив хешей AoH и определил бы компаратор, как описано в perldoc -f sort

Кроме того, я был бы

  • Используйте жемчуг для преобразования в CSV значений только
  • вид
  • Используйте жемчуг для преобразования CSV назад в многострочные записи с name=value парами

Вероятно, было бы лучше сделать целое задание в Perl.

Другие языки программирования доступны.

2
ответ дан 12.12.2019, 13:04

Теги

Похожие вопросы