我有一个类似的文件
line1
line2
line3
line4
.endm
line5
line6
line7
line8
.endm
Run Code Online (Sandbox Code Playgroud)
我想将此文件拆分为.endm并将内容放在2个不同的数组中.输出将是
@array1=(line1,line2,line3,line4);
@array2=(line4,line6,line7,line8);
Run Code Online (Sandbox Code Playgroud)
我试过用
@array = split(".endm",my_file.txt);
print("Array1 = $array[1]\nArray2 = $array[2]\n);
Run Code Online (Sandbox Code Playgroud)
但这只是打印出最后一个.endm的行号
我也尝试了类似的东西
#! /usr/intel/bin/perl -w
use strict;
my $count=0;
open(my $fh, "<", "a.txt")|| die "can't open UTF-8 encoded filename: $!";
my @lines = <$fh>;
my @array;
LOOP: foreach my $line (@lines) {
chomp ($line);
$count = $count+1;
push (@array,$line);
if ($line =~ m/.endm/) {
pop (@array);
last LOOP;
}
}
print("Array : @array\n");
close $fh;
Run Code Online (Sandbox Code Playgroud)
这个打印@array=(line1,line2,line3,line4);但我仍然需要其他4行,以便我可以把它放在一个不同的数组
那么如何根据某些关键字拆分文件呢?
如果您将固定字符串作为字段分隔符,则可以设置内置变量$/(输入记录分隔符)以更改Perl readline()函数读取行的方式.
perl -MData::Dumper -we '$/=".endm\n"; chomp(@a = <>);
@a = map [ split /\n/ ], @a; print Dumper \@a;' file.txt
Run Code Online (Sandbox Code Playgroud)
这将以两个块的形式读取文件,有效地拆分.endm\n.请注意,从字符串末尾chomp删除值$/.map这里的语句只是将输入拆分为换行符并将其放入数组ref中.结果数组是二维的,如Data::Dumper输出中所示:
输出:
$VAR1 = [
[
'line1',
'line2',
'line3',
'line4'
],
[
'line5',
'line6',
'line7',
'line8'
]
];
Run Code Online (Sandbox Code Playgroud)
完整版看起来像这样:
use strict;
use warnings;
use Data::Dumper;
$/ = ".endm\n";
chomp(my @a = <>);
@a = map [split /\n/], @a;
print Dumper \@a;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1643 次 |
| 最近记录: |