从bash对文本文件中的段落进行排序

joh*_*234 3 sorting bash

sort实用程序使您可以方便地对文件中的行进行排序。但是,是否有一种优雅的方法可以在bash中对空行分隔的段落进行排序?

例如

ccc
aa

aba
bbb

aba
ccc

aaa
Run Code Online (Sandbox Code Playgroud)

将不得不成为

aaa

aba
bbb

aba
ccc

ccc
aa
Run Code Online (Sandbox Code Playgroud)

一种解决方案似乎是在所有非空白行上替换换行符号:

ccc\naa    
aba\nbbb
aba\nccc
aaa
Run Code Online (Sandbox Code Playgroud)

然后调用运行 sort

aaa
aba\nbbb
aba\nccc
ccc\naa    
Run Code Online (Sandbox Code Playgroud)

然后还原新行:

aaa

aba
bbb

aba
ccc

ccc
aa    
Run Code Online (Sandbox Code Playgroud)

tri*_*eee 5

Perl进行救援;

perl -n00 -e 'push @a, $_; END { print sort @a }' file
Run Code Online (Sandbox Code Playgroud)

-00选项启用“段落模式”,该模式将输入拆分为空行。

如果-如您的示例中所示-最后输入行不一定为空,则需要单独添加换行符。

perl -n00 -e 'push @a, $_;
   END { $a[-1] .= "\n" if $a[-1] !~ /\n\n$/;
        print sort @a }' file
Run Code Online (Sandbox Code Playgroud)