删除第1列和第2列中具有相同字符串的行

时间:2014-11-24 11:17:01

标签: linux perl shell

我有多行和多列的矩阵。我想删除第一列和第二列中具有相同字符串的那些行。例如file-

wheat_tae-miR1127       wheat_tae-miR1127       100.00  19      0 
wheat_tae-miR1131       wheat_tae-miR1131       100.00  22      0
wheat_tae-miR164        Rice_osa-miR164        100.00  21      0 
wheat_tae-miR164        Maize_miRBase_zma-miR164a-5p    100.00  21      0
wheat_tae-miR444a       Maize_zma-miR444a       100.00  21      0
wheat_tae-miR444a       Rice_osa-miR444a-3p_1   100.00  21      0
wheat_tae-miR444a       wheat_tae-miR444a       100.00  21      0

期望的输出是 -

wheat_tae-miR164        Maize_miRBase_zma-miR164a-5p    100.00  21      0
wheat_tae-miR444a       Maize_zma-miR444a       100.00  21      0
wheat_tae-miR444a       Rice_osa-miR444a-3p_1   100.00  21      0

4 个答案:

答案 0 :(得分:3)

Awk解决方案:

awk '$1!=$2' file                        

答案 1 :(得分:2)

事实证明,您可以使用awk

轻松完成此操作
awk -F' ' '$1!=$2' input_file

答案 2 :(得分:2)

从命令行使用perl,

perl -ane 'print if $F[0] ne $F[1]' file

答案 3 :(得分:1)

在perl中,这是一个哈希工具。 (由于问号而提供perlish替代品)。

use strict;
use warnings;

my %seen;
while (<DATA>) {
    my ( $col1, $col2 ) = split;
    print unless ( $col1 eq $col2 );
}

__DATA__
wheat_tae-miR1127       wheat_tae-miR1127       100.00  19      0 
wheat_tae-miR1131       wheat_tae-miR1131       100.00  22      0
wheat_tae-miR164        Rice_osa-miR164        100.00  21      0 
wheat_tae-miR164        Maize_miRBase_zma-miR164a-5p    100.00  21      0
wheat_tae-miR444a       Maize_zma-miR444a       100.00  21      0
wheat_tae-miR444a       Rice_osa-miR444a-3p_1   100.00  21      0
wheat_tae-miR444a       wheat_tae-miR444a       100.00  21      0

似乎可以做到这一点,但与你的相比,我确实得到了额外的一条线?

wheat_tae-miR164        Rice_osa-miR164        100.00  21      0 
wheat_tae-miR164        Maize_miRBase_zma-miR164a-5p    100.00  21      0
wheat_tae-miR444a       Maize_zma-miR444a       100.00  21      0
wheat_tae-miR444a       Rice_osa-miR444a-3p_1   100.00  21      0