我有一个文件,其内容如下
123,1,ABC,DEF
123,1,ABC
345,4,TZY
456,3,XYZ
333,4,TTT,YYY
333,4,TTT我想忽略前一个和下一个内容相同的行,即包含123和333的行
输出需要是
345,4,TZY
456,3,XYZ你有什么建议吗?
发布于 2009-09-22 19:20:08
TMTOWTDI:
my $str = join '', <>;
$str =~ s/^(\d+).+\n(\1.+\n)+//mg;
print $str;编辑:第一行也可以替换为Randal L. Schwartz的slurp:
my $str = do { local $/; <HANDLE> }; # 发布于 2009-09-22 21:00:45
TMTOWDI
my $last_prefix = "";
my $last_line = "";
while (<>) { check_line($_); }
check_line(""); sub check_line {
my $line = shift;
my ($prefix) = ($line =~ /^([^,]*),/);
if (($prefix || "") ne $last_prefix ) {
print $last_line;
$last_line = $_;
} else {
$last_line = "";
};
$last_prefix = $prefix;
}这很冗长,但我怀疑在一个非常大的文件上,它的性能可能比regexp更好。
发布于 2009-09-22 18:24:29
尝试使用uniq实用程序
uniq -w 3 your_file.txt
就能达到目的。不需要perl
https://stackoverflow.com/questions/1461493
复制相似问题