免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5622 | 回复: 7
打印 上一主题 下一主题

请问两个文件比对后,如何只保留不重复的部分? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-01-17 23:26 |只看该作者 |倒序浏览
文本1
qwe
123
wer
u7y7


文本2
qwe
dfg123
dffh
u7y7

同文本2比对后输出不重复的:

123
wer

请大家帮忙指点一下,多谢了!

[[i] 本帖最后由 perl911 于 2006-1-17 23:31 编辑 [/i]]

论坛徽章:
0
2 [报告]
发表于 2006-01-18 13:04 |只看该作者

论坛徽章:
0
3 [报告]
发表于 2006-01-18 13:12 |只看该作者
描述的不是很全面,也不知道你的具体意图。
一种理解可以这样做

  1. @data1=<FILE1>;
  2. @data2=<FILE2>;
  3. ($data2[$_] eq $data1[$_]) || print $data1[$_] foreach (0..$#data1);
复制代码

论坛徽章:
0
4 [报告]
发表于 2006-01-18 17:59 |只看该作者
抱歉,是俺没说清楚!
俺的意思是:只要文本2(母文件)包含的字符,文本1就要去掉。
输出后的文本1全是文本2没有的。

[ 本帖最后由 perl911 于 2006-1-18 18:03 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2006-01-18 20:12 |只看该作者
  1. use strict;

  2. open T1, "1.txt" or die "$!";
  3. open T2, "2.txt" or die "$!";
  4. my %diff;

  5. while (<T2>)
  6. {
  7.     $diff{$_}=1;
  8. }

  9. while (<T1>)
  10. {
  11.     print unless $diff{$_};
  12. }

  13. close T2;
  14. close T1;
复制代码

论坛徽章:
0
6 [报告]
发表于 2006-01-18 21:23 |只看该作者
厉害啊!

while (<T2>)
{
    $diff{$_}=1;
}

给散列赋值,所有的值都是1。

while (<T1>)
{
    print unless $diff{$_};

}

第二句不太明白。
请兰花仙子指点,非常感谢!

[ 本帖最后由 perl911 于 2006-1-18 22:05 编辑 ]

论坛徽章:
0
7 [报告]
发表于 2006-01-18 22:49 |只看该作者
原帖由 perl911 于 2006-1-18 21:23 发表
厉害啊!

while (<T2>)
{
    $diff{$_}=1;
}

给散列赋值,所有的值都是1。

while (<T1>)
{
    print unless $diff{$_};

}

第二句不太明白。
请兰花仙子指点,非常感谢!



print unless $diff{$_};这句的意思是,如果以当前行$_为key的hash  value不存在,那就说明第2个文件里不存在这个当前行,那就把它print出来。

论坛徽章:
0
8 [报告]
发表于 2006-01-18 22:59 |只看该作者
呵呵,俺终于弄明白了。多谢兰花仙子热心指点!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP