perl脚本中如何删除重复行?
现在我的一个文件里有如下几行:oss/src/includeoss/src/includeoss/src/platform/graphoss/src/platform/g...
现在我的一个文件里有如下几行:
oss/src/include
oss/src/include
oss/src/platform/graph
oss/src/platform/graph
oss\src\platform\graph
oss\src\include
我需要用perl脚本输出的文件中不能有重复行,不知道哪位大神给予讲解,本人不甚感激,谢谢! 展开
oss/src/include
oss/src/include
oss/src/platform/graph
oss/src/platform/graph
oss\src\platform\graph
oss\src\include
我需要用perl脚本输出的文件中不能有重复行,不知道哪位大神给予讲解,本人不甚感激,谢谢! 展开
3个回答
2014-01-24
展开全部
假定你的文件是oss.txt,
第一步,把以下脚本保存成script.pl,
%hash = ();
while(<>) { # 对于输入文件的每一行
chomp(); # 去除行尾换行符
$_ =~ s/\\/\//g; # 把\替换成/,如果想区分斜杠和反斜杠则请移除本行代码
$hash{$_}=1; # 标记该行已出现过
}
my @lines = keys(%hash); # 获得所有标记过的行
$" = "\n"; # 定义输出的分隔符是换行符
print("@lines"); # 输出
第二步,在命令行执行以下命令, 执行完成后result.txt中就是不含重复行的文件。
perl script.pl oss.txt > result.txt
比如你问题中列出的内容,过滤后的结果是
oss/src/platform/graph
oss/src/include
如果区分斜杠和反斜杠,则结果是,
oss\src\include
oss\src\platform\graph
oss/src/platform/graph
oss/src/include
展开全部
#!perl -w
open FH1,"1.txt";
open FH2,">2.txt";
$temp = "";
while(<FH1>)
{
if(not $temp eq $_)
{
print FH2;
$temp = $_;
}
}
close FH1;
close FH2;
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
open F,"1.txt";#画面上文件
@array=<F>;
my %count;
my @new = grep { ++$count{ $_ } < 2; } @array;
print @new;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询