从bash对文本文件中的段落进行排序 [英] Sort paragraphs in text file from bash

查看:47
本文介绍了从bash对文本文件中的段落进行排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

The sort utility let's you conveniently sort lines in a file. However, is there an elegant way to sort blank-line separated paragraphs in bash?

例如

ccc
aa

aba
bbb

aba
ccc

aaa

必须成为

aaa

aba
bbb

aba
ccc

ccc
aa

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

One solution seems to be to replace new line symbol on all non-blank lines:

ccc\naa    
aba\nbbb
aba\nccc
aaa

然后调用运行 sort

aaa
aba\nbbb
aba\nccc
ccc\naa    

,然后恢复新行:

aaa

aba
bbb

aba
ccc

ccc
aa    

推荐答案

Perl进行救援;

Perl to the rescue;

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

-00 选项启用段落模式",该模式将输入分隔为空行.

The -00 option enables "paragraph mode" which splits input on empty lines.

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

If - as in your sample - the last input line isn't necessarily empty, you will need to add a newline separately.

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

这篇关于从bash对文本文件中的段落进行排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆