如果我在Perl这样做,我会在思乐普整个文件和Munge时间就这样我就可以根据自己的序列号的原生线排序。我不知道你的文件格式是多么一致,但一个perl方法可能是:
#!/usr/bin/perl -w
my @data;
# slurp in each line, and tag it by its sequence number
foreach my $line (<STDIN>)
{
if ($line =~ /sequence=(\S+)/)
{
push @data, { sequence => $1, line => $line };
} else
{
die "unhandled line: $line"; # only if needed
}
}
# sort the lines by their sequence number into @sorted
my @sorted = sort { $a->{sequence} <=> $b->{sequence} } @data;
# generate the final result by extracting the original lines
# from the sorted array and concatenating them
my $result = join("", map { $_->{line} } @sorted);
# output the sorted result
print $result;
我试过这个在你上面的例子,它做了诡计。如果脚本可以安全地忽略输入中的“垃圾”行,则可以按die
行。
此外,如果需要升序和降序排列顺序之间切换,你可以在这行交换$a
和$b
:
my @sorted = sort { $a->{sequence} <=> $b->{sequence} } @data;
如果序列号不纯粹是数字,或要比较他们作为字符串,改变<=>
运营商cmp
:
my @sorted = sort { $a->{sequence} cmp $b->{sequence} } @data;
感谢,去除分模线,但做的把戏我。干杯! – brercia