如何在perl中对文件中两个模式之间的所有行进行排序
我有一个文本文件,其中有需要在两种模式之间排序的行 我正在编写Perl脚本,但似乎并没有产生结果 输入文件如下所示:如何在perl中对文件中两个模式之间的所有行进行排序,perl,Perl,我有一个文本文件,其中有需要在两种模式之间排序的行 我正在编写Perl脚本,但似乎并没有产生结果 输入文件如下所示: BEGIN This is line10 This is line3 This is line15 ... END BEGIN This is line50 This is line12 This is line400 ... END 注: 模式开始和结束之间的所有行都需要排序。非常感谢任何关于此的Perl脚本指针。Perl-ne'if($inside){ perl -ne '
BEGIN
This is line10
This is line3
This is line15
...
END
BEGIN
This is line50
This is line12
This is line400
...
END
注:
模式开始
和结束
之间的所有行都需要排序。非常感谢任何关于此的Perl脚本指针。Perl-ne'if($inside){
perl -ne 'if ($inside) {
if (/END/) {
print sort {
($a =~ /(\d+)/)[0] <=> ($b =~ /(\d+)/)[0]
} splice @buffer;
print;
} else { push @buffer, $_ }
} else {
print;
$inside = 1 if /BEGIN/;
}' -- input-file
如果(/END/){
打印排序{
($a=~/(\d+/)[0]($b=~/(\d+)/)[0]
}拼接@缓冲区;
打印
}else{push@buffer,$\
}否则{
打印
$inside=1 if/BEGIN/;
}“--输入文件
逐行读取输入,为每行运行代码-n
- 如果在模式之间的块中,变量
为真$inside
- 对于块内的行,我们不打印它们,而是存储在数组中,请参见
- 在块的最后一行,我们从数组中删除存储的行,按它们包含的数字(或您需要的任何其他数字)对它们进行排序并打印。看见然后我们打印结束模式线
- 在图案块之外,我们只需打印线条。如果我们在那里遇到BEGIN模式,我们将标志$inside设置为1以开始处理块
- 以下perl脚本可以正常工作。将输入文件作为参数传递
use strict;
use warnings;
my @line;
while (<>) {
push @line, $_ if (/BEGIN/.../END/);
if(/END/ && @line) {
chomp @line;
print "$_$/" for sort @line[1..$#a-1];
@line = ();
}
print if /BEGIN|END/;
}
使用严格;
使用警告;
我的@line;
而(){
按@line,$\if(/BEGIN/../END/);
如果(/END/&&@行){
咬线;
为第[1..$#a-1]行的排序打印“$\u$/”;
@行=();
}
打印if/BEGIN | END/;
}
这会按整行进行词汇排序。
请澄清排序标准或根据您的需要进行修改。您能告诉我们您在
BEGIN
和END
之间解析数据的方法吗?您需要哪部分的帮助?在delimeters之间获取零件?为此,您可以使用。。触发器运算符。用于使用自定义排序功能进行排序?您只需将回调传递给排序内置项。我可以帮你,我只需要知道你在说什么。我可以得到分隔符之间的部分,如下所示。如果(/BEGIN/../END/){print“$\n”;}排序需要限制在一个特定的部分。排序需要在该部分行的第5列进行,例如下面的排序{$a->[5]cmp$b->[5]}@lines;您可能想使用-l
。否则,foo␉条形图
将在foo
之前排序(其中“␉" (这是一个标签).Sort::Key::Natural的natsort
将是对任意行进行排序的好选择。@ikegami:通过删除触发器来简化排序。排序只是一个例子,因为OP没有指定如何准确地对行进行排序。是的,只需为OP或其他人提供提示。我想知道如果开始和结束模式都相同,如何对所有行进行grep例如。BEGIN这是第10行。这是第3行。这是第15行。……END。@user419534若要在开始模式和结束模式相同时使用此代码,请在/BEGIN/
和/E之间使用三个点而不是两个点ND/
。并将/END/
中的条件替换为/END/&&&&line
(我已经用这些更改更新了答案。此外,这里不清楚“grep”是什么意思。)