Используя Perl, вы можете запустить что-то вроде:
perl -0n
)split(/^(?=\S)/m)
perl -0ne 'print sort split(/^(?=\S)/m) ' ex
с помощью awk
мы могли бы удерживать каждую группу в массиве, связанном с awk, на основе разрыва строки -между каждой группой; затем asort()
и распечатайте его, отсортированный по используемому циклу -.
awk '/^$/{ ++group; next} { saving[group]=(saving[group]==""? $0 : saving[group] RS $0) }
END{ asort(saving);
for(group in saving) print saving[group]
}' infile
примечание:вы можете использовать элемент PROCINFO["sorted_in"]
, чтобы указать, какой тип сортировки вам нужен; например, PROCINFO["sorted_in"]="@val_str_desc"
отсортирует val ue нашего массива как str ing и в порядке desc .
тестирование входного файла типа:
BFirstSection
Unique first line in first section
Unique second line in first section
DSecondSection
Unique first line in second section
Unique second line in second section
Aanothersection...
...
...
CfourthSection
Unique first line in Nth section
Unique second line in Nth section
вы получите вывод как:
Aanothersection...
...
...
BFirstSection
Unique first line in first section
Unique second line in first section
CfourthSection
Unique first line in Nth section
Unique second line in Nth section
DSecondSection
Unique first line in second section
Unique second line in second section
Сначала sed помещает каждый раздел в одну строку, используя текст <EOL>
в качестве разделителя между строками разделов. Затем я сортирую разделы и использую второй sed, чтобы вернуть каждый <EOL>
обратно на новую строку.
sed -r ':r;$!{N;br};s:\n([[:blank:]])(\1*):<EOL>\1\2:g' file|sort|sed -r '/^$/d;:l;G;s:(.*)<EOL>(.*)(\n):\1\3\2:;tl;$s:\n$::'
Я не выбрал символ в качестве разделителя, так как он может быть во входном файле, поэтому вместо этого я использовал <EOL>
.
Результат:Я добавил новую строку после каждого раздела, кроме последнего, чтобы воссоздать стиль входного файла.
FirstSection
Unique first line in first section
Unique second line in first section
NthSection
Unique first line in Nth section
Unique second line in Nth section
SecondSection
Unique first line in second section
Unique second line in second section