#!/usr/bin/perl -w
use strict;
open (EVENTLOGFILE, "<eventlog.txt") || die("Could not open file eventlog file");
open (EVENTLOGFILE_NODATETIME, ">eventlog_nodatetime.txt") || die("Could not open new event log file");
my($line) = "";
while ($line = <EVENTLOGFILE>) {
my @fields = split /[ \t]/, $line;
my($newline) = "";
my($i) = 1;
foreach( @fields )
{
my($field) = $_;
if( $i ne 3 )
{
$newline = $newline . $field;
}
$i++;
}
print EVENTLOGFILE_NODATETIME "$newline";
}
close(EVENTLOGFILE);
close(EVENTLOGFILE_NODATETIME);
如果我每次打印$ line而不是$ newline,它可以检测到编码没问题。只有当我尝试修改它被弄乱的线时才会这样。
答案 0 :(得分:1)
我猜它不是编码(如ISO 8859-1 vs UTF-8),而是行结尾(CR,LF vs LF)。
如果您使用chomp并打印“\ n”,您可能会将行结尾转换为平台原生。
我认为你的剧本写得更好(未经测试):
#!/usr/bin/perl
use strict;
use warnings;
open ($old, '<', 'eventlog.txt') or die 'Could not open eventlog.txt';
open ($new, '>', 'eventlog_nodatetime.txt')
or die 'Could not open eventlog.nodatetime.txt');
$\ = "\n";
while (<$old>) {
chomp;
s/^(\S+\s+\S+\s+)\S+\s+(.*)/$1$2/;
print $new;
}
close $old;
close $new;
或者
perl -pe 's/^(\S+\s+\S+\s+)\S+\s+(.*)/$1$2/' eventlog.txt >eventlog.nodatetime.txt
或者在分裂时使用拼接? 或者......