通过与第一列进行比较,从文本文件中的行中删除所有重复的单词

时间:2014-03-08 06:55:06

标签: linux perl

这是我的输入文件:

SC0001 : SC0001 SC0002 SC0001 
SC0004 : SC0004 SC0008 SC0001 SC0001 SC0004 SC0009 SC0000 SC0003 SC0002
SC0006 : SC0001 SC0006 SC0004 SC0005 SC0006 
SC0003 : SC0001 SC0003 
SC0008 : SC0008
SC0009 : SC0001 SC0009 SC0001 SC0001

输出应如下所示:

 SC0001 : SC0002 
 SC0004 : SC0008 SC0001 SC0009 SC0000 SC0003 SC0002
 SC0006 : SC0001 SC0004 SC0005  
 SC0003 : SC0001  
 SC0008 : 
 SC0009 : SC0001 SC0001 SC0001

2 个答案:

答案 0 :(得分:3)

perl -pe '%s=(); s/(\S+)/ $s{$1}++ ? "" : $1 /ge; s/ \K +//g' file

答案 1 :(得分:0)

这是快速而肮脏的解决方案:

#!/usr/bin/perl

use strict;
use warnings;

open(my $fh, "<", "test1.txt")
    or die "cannot open < file name: $!";

while (my $line = <$fh>) {
    my @elements = split(/ : /, $line);
    if ($#elements > -1) {
        $elements[1] =~ s/ ?$elements[0]//g;
        $line = join(" : ", @elements);
        $line =~ s/ {2,}/ /;
    }
    print $line;
}

close($fh);

输入文件

SC0001 : SC0001 SC0002 SC0001
SC0004 : SC0004 SC0008 SC0001 SC0001 SC0004 SC0009 SC0000 SC0003 SC0002
SC0006 : SC0001 SC0006 SC0004 SC0005 SC0006
SC0003 : SC0001 SC0003
SC0008 : SC0008
SC0009 : SC0001 SC0009 SC0001 SC0001

输出

SC0001 : SC0002
SC0004 : SC0008 SC0001 SC0001 SC0009 SC0000 SC0003 SC0002
SC0006 : SC0001 SC0004 SC0005
SC0003 : SC0001
SC0008 : 
SC0009 : SC0001 SC0001 SC0001