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

标签 bash sorting

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

例如

ccc
aa

aba
bbb

aba
ccc

aaa

必须成为

aaa

aba
bbb

aba
ccc

ccc
aa

一个解决方案似乎是替换所有非空行上的新行符号:

ccc\naa    
aba\nbbb
aba\nccc
aaa

然后调用运行 sort

aaa
aba\nbbb
aba\nccc
ccc\naa    

然后恢复新行:

aaa

aba
bbb

aba
ccc

ccc
aa    

最佳答案

Perl 助您一臂之力;

perl -n00 -e 'push @a, $_; END { print sort @a }' file

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

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

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

关于bash - 从 bash 对文本文件中的段落进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37669135/

相关文章:

string - 如何根据顺序对字符串进行编号

java - 按日期和 ID 对 ArrayList<Usable> 进行排序

arrays - ruby 按长度排序数组,然后按字母顺序排序

PHP 按日期排序多个 RSS 提要

java - 排序器从原始序列中获取值

linux - AWK 每隔一列打印一次,从最后一列(和最后一列的旁边)开始进行 N 次交互(从右到左打印)

bash while 循环删除文本文件的最后一行

python - 在 bash shell 中使用 Python 2.6 从目录中读取文件的正确方法

Java ProcessBuilder + bash : "No such file or directory"

java - 以编程方式从java在终端中执行命令