亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標題: 去除重復內容并合并多個文本 [打印本頁]

作者: tingshuibanxia    時間: 2016-08-17 14:05
標題: 去除重復內容并合并多個文本
如題。假如
文本A:
>123
EWDRESRF
>434  7
GFHHHHHHHHHHHHSD
>4_  7
RTGFGFHGFF
...

文本B:
>34SF
EDWRDFDEWDRESRFRFEFQQQ
>3_  7
RTGFGFHGF
>1111111111
GFHHHHHHHHHHHHSD
...

文本C:
>123
RTGFGFHGF
>RER
DFFDGFHOEIWR
...

將文本間相同序列合并為一個(加粗部分),并且標識符>以第一個文件為準,只保留多個文本各自不同的部分和共有部分,
上述得到:

>123
EWDRESRF
>434  7
GFHHHHHHHHHHHHSD
>4_  7
RTGFGFHGFF
>34SF
EDWRDFDEWDRESRFRFEFQQQ
>RER
DFFDGFHOEIWR
作者: MMMIX    時間: 2016-08-17 14:56
就是根據(jù)序列去重嘛
作者: jason680    時間: 2016-08-17 15:56
去重 ==> !$h{$_}++

$ perl -lne '{if(m/^>/){$k=$_;next}if(!$h{$_}++){print "$k\n$_"}}' A B C
>123
EWDRESRF
>434  7
GFHHHHHHHHHHHHSD
>4_  7
RTGFGFHGFF
>34SF
EDWRDFDEWDRESRFRFEFQQQ
>3_  7
RTGFGFHGF
>RER
DFFDGFHOEIWR
作者: sunzhiguolu    時間: 2016-08-17 16:41
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;

  4. $/ = ">";
  5. my (%hKeys);
  6. while (<>){
  7.     chomp;
  8.     my ($id, $str) = split (/\n/);
  9.     next if (!$id);
  10.     if ($ARGV eq 'a'){
  11.         $hKeys{$id} = $str;
  12.         print ">$id\n$str\n";
  13.         next;
  14.     }
  15.     next if (exists $hKeys{$id} or grep {$_ eq $str} values %hKeys);
  16.     print ">$id\n$str\n";
  17. }
復制代碼
perl abc.pl a b c
--------------------------------------------------------------------------------------------
>123
EWDRESRF
>434  7
GFHHHHHHHHHHHHSD
>4_  7
RTGFGFHGFF
>34SF
EDWRDFDEWDRESRFRFEFQQQ
>3_  7
RTGFGFHGF
>RER
DFFDGFHOEIWR

作者: sunzhiguolu    時間: 2016-08-17 16:46
本帖最后由 sunzhiguolu 于 2016-08-17 16:53 編輯

抱歉...


















作者: tingshuibanxia    時間: 2016-08-17 16:50
回復 3# jason680


    大神,這個問題怎么破?http://www.72891.cn/thread-4252601-1-1.html
用grep -x -B1后多出了第三行 “--”




歡迎光臨 Chinaunix (http://www.72891.cn/) Powered by Discuz! X3.2