求助:perl,怎么能够不排序,去掉重复的行
我有一个文本,格式为:name1abcdefga1aaaname1abcdefga2bbbname2ttttttta3dddname2ttttttta4www因为a1a2...
我有一个文本,格式为: name1 abcdefg a1 aaa name1 abcdefg a2 bbb name2 ttttttt a3 ddd name2 ttttttt a4 www因为a1 a2属于name1,a3 a4属于name2,所以我不希望改变文本的行的顺序,也就是不能用sort uniq 而是希望能够除掉重复的name,把格式变成 name1 abcdefg a1 aaa a2 bbb name2 ttttttt a3 ddd a4 www我是初学perl的,所以希望有人能帮帮我,万分感谢!!
展开
3个回答
2013-09-21
展开全部
回复 2# BANNED 是只保留第一个,但是不止name有重复的,整个文本里,a1 a2也会出现重复,但是不能删掉,也就是我只删除以name开头的重复的行,并只保留一行……可以用hash吗?我不知道具体怎么写……写出来总是不对#!/usr/bin/perl -wopen (MYFILE, "D:/new7.txt") || die ("Could not open file");open (OUTFILE,">D:/a.txt");@line= ;foreach $_(@line){if ($_=~/^name/){print OUTFILE unless $seen{$_}++;}else{ chomp;print OUTFILE "$_";}}close(OUTFILE);close(MYFILE);运行出来,什么都没删掉……
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-09-21
展开全部
<1> 如果你要操作的文件有name的每一行都在行首的话:从你的代码来看,应该没有什么问题,你是把你要的输出重定向到了a.txt,另外还是先把记录的hash初始化一下的好,另外你把之前的唯一行都去掉了回车,重复的行又保留了....<2> 但是你的操作文件不是的话,像/^name/ 是匹配不到你所需要的....
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-09-21
展开全部
回复 1# lynn012 重复出现的只保留第一个?是吗?可以直接用 awk:awk 'a[$0]++' urfile
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询