2014-11-24 84 views
0

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

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 
+0

你能解释一下这行,如果有一个以上的特定名称应采取?在你的例子中并不清楚。 – raina77ow 2014-11-24 11:19:52

+0

第1&2列中的字符串并非在所有行中都是固定的,而是可变的。我想要在第1和第2列中使用不同的那些行。 – aksg24 2014-11-24 11:21:58

+0

'wheat_tae-miR1131'和'wheat_tae-miR1131'之间有什么区别? – choroba 2014-11-24 11:24:54

回答

2

原来可以用awk

awk -F' ' '$1!=$2' input_file 
+1

你也可以避免'打印'... – 2014-11-24 11:39:43

1

做到这一点很容易地在Perl中,这是一个哈希的工具。 (由于问题标签提供了一个完美的选择)。

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 
+1

每当你写'split/\ s + /'你几乎肯定要'split'''。单个文字空间是“split”的特殊情况,它与前者不同,如果要分割的字符串中出现前导空白,则不会返回空字符串作为列表的第一个元素。如果没有指定参数,它也是默认的,所以你的语句会更好地写成'my($ col1,$ col2)= split' – Borodin 2014-11-24 17:42:11

+0

好点。相应更新。 – Sobrique 2014-11-24 17:43:44

3

awk中的解决方案:

awk '$1!=$2' file       
2

使用命令行的perl,

perl -ane 'print if $F[0] ne $F[1]' file 
相关问题