如何删除许多文件中的头行并使用Perl重命名它们
我需要帮助处理许多小文件。我需要删除第一行(标题日期行),如果它存在,然后重命名文件如何删除许多文件中的头行并使用Perl重命名它们,perl,Perl,我需要帮助处理许多小文件。我需要删除第一行(标题日期行),如果它存在,然后重命名文件q_dat\u 20110816.out=>q_dat\u 20110816.dat 我想出了如何打开文件,进行匹配并打印出需要删除的行 现在我需要弄清楚如何删除该行,然后完全重命名该文件 你将如何处理这个问题 测试代码: #!/usr/local/bin/perl use strict; use warnings; my $file = '/share/dev/dumps/q_dat_20110816.out
q_dat\u 20110816.out
=>q_dat\u 20110816.dat
我想出了如何打开文件,进行匹配并打印出需要删除的行
现在我需要弄清楚如何删除该行,然后完全重命名该文件
你将如何处理这个问题
测试代码:
#!/usr/local/bin/perl
use strict;
use warnings;
my $file = '/share/dev/dumps/q_dat_20110816.out';
$file = $ARGV[0] if (defined $ARGV[0]);
open DATA, "< $file" or die "Could not open '$file'\n";
while (my $line = <DATA>) {
$count++;
chomp($line);
if ($line =~m/(Data for Process Q)/) {
print "GOT THE DATE: --$line\n";
exit;
}
}
close DATA;
新文件:q_dat_20110816.dat
Make Model Text
a b c
d e f
g h i
这里有一种方法:
use strict;
use warnings;
my @old_file_names = @ARGV;
for my $f (@old_file_names){
# Slurp up the lines.
local @ARGV = ($f);
my @lines = <>;
# Drop the line you don't want.
shift @lines if $lines[0] =~ /^Data for Process Q/;
# Delete old file.
unlink $f;
# Write the new file.
$f =~ s/\.out$/.dat/;
open(my $h, '>', $f) or die "$f: $!";
print $h @lines;
}
使用严格;
使用警告;
我的@old_file_name=@ARGV;
对于我的$f(@old_file_name){
#把台词弄乱。
本地@ARGV=(f美元);
我的@lines=;
#放下你不想要的电话线。
如果$lines[0]=~/^进程Q/的数据,则shift@lines;
#删除旧文件。
取消$f的链接;
#写入新文件。
$f=~s/\.out$/.dat/;
打开(我的$h,“>”,$f)或死亡“$f:$!”;
打印$h@行;
}
内存不足父子解决方案:
use strict;
use warnings;
for my $fni (@ARGV) {
open(FI, '<', $fni) or die "cant open in '$fni', $!,";
my $fno = $fni; $fno =~ s/\.out$/.dat/;
open(FO, '>', $fno) or die "cant open out '$fno', $!,";
foreach ( <FI> ) {
print FO unless $. == 1 and /^Data for Process Q/;
};
close FO;
close FI;
unlink $fni;
};
使用严格;
使用警告;
我的$fni(@ARGV){
打开(FI),,$fno)或模具“无法打开'$fno',$!,”;
foreach(){
打印FO,除非$.==1和/^过程Q/的数据;
};
关闭FO;
密切关注金融机构;
取消$fni的链接;
};
这是未经测试的
use strict;
use warnings;
for my $fni (@ARGV) {
open(FI, '<', $fni) or die "cant open in '$fni', $!,";
my $fno = $fni; $fno =~ s/\.out$/.dat/;
open(FO, '>', $fno) or die "cant open out '$fno', $!,";
foreach ( <FI> ) {
print FO unless $. == 1 and /^Data for Process Q/;
};
close FO;
close FI;
unlink $fni;
};