2014-11-24 85 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 
相關問題