Sorting 如何将标题和基础内容作为一个单元进行排序?
我有一个标题形式的内容,然后在该内容下写下 我需要对标题进行排序,但基础内容将独立排序,而不是将标题作为一个单元 我可以做的一个方法是对所有标题进行grep排序,并将标题和下面的行数粘贴到一个新文件中 但我需要一些有效的方法。请建议一些方法。下面给出了内容示例(货币为标题,下面给出的是该货币的序列号)Sorting 如何将标题和基础内容作为一个单元进行排序?,sorting,unix,Sorting,Unix,我有一个标题形式的内容,然后在该内容下写下 我需要对标题进行排序,但基础内容将独立排序,而不是将标题作为一个单元 我可以做的一个方法是对所有标题进行grep排序,并将标题和下面的行数粘贴到一个新文件中 但我需要一些有效的方法。请建议一些方法。下面给出了内容示例(货币为标题,下面给出的是该货币的序列号) Unixsort命令处理单行数据。如注释中所述,一个选项是将数据转换为每种货币的一行,使用排序,然后将复合行分开: sed -e 'N;N;N;s/\n/ /g' data | sort | pe
Unix
sort
命令处理单行数据。如注释中所述,一个选项是将数据转换为每种货币的一行,使用排序,然后将复合行分开:
sed -e 'N;N;N;s/\n/ /g' data | sort | perl -p -e 's/ (=+) /\n$1\n/; s/ $/\n/;'
sed
对于在字符串中添加换行符表现出了顽固的态度,因此我改用了perl
。当然,如果您使用的是perl
,那么您可以在perl
中完成整个工作。这是详细版本,是sed
和sort
部分的相当直接的音译,只是不需要删除换行符,这简化了排序后的打印:
#!/usr/bin/env perl
use strict;
use warnings;
my @currencies;
while (<>)
{
my $l2 = <>;
my $l3 = <>;
my $l4 = <>;
push @currencies, "$_$l2$l3$l4";
}
print foreach (sort @currencies);
两个脚本都生成输出:
C01
====
892341231,786754321,1234567
C02
====
444341231,333754321,2224567
C05
====
78675433432,1245673234
这是Perl,所以有不止一种方法(TMTOWTDI),其他方法使用的暴力更少,并且比一次读取4行代码更脆弱。例如,您可以将行分隔符设置为“”
”以强制段落模式,这样输入的每个“行”都是一个段落,由一个或多个空行分隔
#!/usr/bin/env perl
use strict;
use warnings;
local $/ = "";
my @currencies = <>;
print foreach (sort @currencies);
或者您可以添加一个shebang行:
#!/usr/bin/perl -w
local $/ = "";
print foreach (sort <>);
#/usr/bin/perl-w
本地$/=”;
打印foreach(排序);
请显示所需的输出。什么是“序列号”——例如钞票上的数字?序列号列表能有多大?它们被分成多行吗?最可能的情况是,您需要格式化输入数据,使每种货币及其所有序列号都在一行上,对该列表进行排序,然后将单行数据重新转换为多行。@JonathanLeffler:谢谢Jonathan的回复,我需要按上面的标题按排序格式输出,它已经按照升序排序了。是的,下面的数据在一条直线上,数据包括等号线,以及货币之间的空行。
#!/usr/bin/env perl
use strict;
use warnings;
local $/ = "";
my @currencies = <>;
print foreach (sort @currencies);
local $/ = "";
print foreach (sort <>);
#!/usr/bin/perl -w
local $/ = "";
print foreach (sort <>);