1

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

Пример:

name = Mercury
order = 1
mass = 0.06

name = Venus
order = 2
mass = 0.82

name = Earth
order = 3
mass = 1

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

1 ответ1

2

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

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

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

  • используйте perl для объединения строк каждой записи
  • Сортировать
  • используйте perl для разделения строк каждой записи

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

В качестве альтернативы я бы

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .