如果行IN(..)
和行OUT(..)
的括号中包含相同的字符串,请删除行OUT(..)
。
我的输入文件如下:
IN(ABC);
IN(DEF);
IN(FGH);
OUT(QWE);
OUT(ABC);
OUT(DEF);
我想要的输出是:
IN(ABC);
IN(DEF);
IN(FGH);
OUT(QWE);
答案 0 :(得分:-1)
假设所有IN(...)
行都在OUT(...)
行之前(即已排序),以下内容应该有效:
my %in;
while (<DATA>) {
if (/^IN\((.*?)\)/) {
$in{$1} = 1;
} elsif (/^OUT\((.*?)\)/) {
if ($in{$1}) {
next;
}
}
print $_;
}
__DATA__
IN(ABC);
IN(DEF);
IN(FGH);
OUT(QWE);
OUT(ABC);
OUT(DEF);
我们的想法是使用哈希来跟踪已使用的IN
个值。逐行浏览数据,如果是IN
行,则存储该值并打印该行。如果它是OUT
行并且不在已识别的IN
值列表中,请将其打印出来,否则请跳过它。