Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting 如何将标题和基础内容作为一个单元进行排序?_Sorting_Unix - Fatal编程技术网

Sorting 如何将标题和基础内容作为一个单元进行排序?

Sorting 如何将标题和基础内容作为一个单元进行排序?,sorting,unix,Sorting,Unix,我有一个标题形式的内容,然后在该内容下写下 我需要对标题进行排序,但基础内容将独立排序,而不是将标题作为一个单元 我可以做的一个方法是对所有标题进行grep排序,并将标题和下面的行数粘贴到一个新文件中 但我需要一些有效的方法。请建议一些方法。下面给出了内容示例(货币为标题,下面给出的是该货币的序列号) Unixsort命令处理单行数据。如注释中所述,一个选项是将数据转换为每种货币的一行,使用排序,然后将复合行分开: sed -e 'N;N;N;s/\n/ /g' data | sort | pe

我有一个标题形式的内容,然后在该内容下写下

我需要对标题进行排序,但基础内容将独立排序,而不是将标题作为一个单元

我可以做的一个方法是对所有标题进行grep排序,并将标题和下面的行数粘贴到一个新文件中

但我需要一些有效的方法。请建议一些方法。下面给出了内容示例(货币为标题,下面给出的是该货币的序列号)


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 <>);