2016-06-14 53 views
2

改變一個字母后刪除空格有一個文本文件,其中一部分具有以下格式如何在整個文檔

exon_id=OFAS000007-RA-EXON02; transcript=OFAS000007-RA; 
exon_id=OFAS000007-RA-EXON05; transcript=OFAS000007-RA; 
exon_id=OFAS000008-RA-EXON03; transcript=OFAS000008-RA; 
exon_id=OFAS000017-RA-EXON07; transcript=OFAS000017-RA; 

我需要刪除的兩列之間的空白。一個簡單的搜索和替換將不起作用,因爲該文件中有許多其他列,其中有文本,數字和符號,後面緊跟着「;」。

我知道任何查找和替換方法都需要將第一個字符串的「EXON」部分和第二個字符串的「transcript」部分,但我如何指示與「EXON」不同的數字?

編輯:製表符分隔的文本文件有太多的信息甚至插入這裏的一部分;有太多額外的列,我不需要以任何方式修改。我只需要結合這裏提到的兩列,留下所有其他人分開,但在相同的文件,相同的順序。下面是所需的輸出應該是什麼的兩列組合時,如:

exon_id=OFAS000007-RA-EXON02;transcript=OFAS000007-RA; 
exon_id=OFAS000007-RA-EXON05;transcript=OFAS000007-RA; 
exon_id=OFAS000008-RA-EXON03;transcript=OFAS000008-RA; 
exon_id=OFAS000017-RA-EXON07;transcript=OFAS000017-RA; 
+0

可否請您提供您不打算匹配的示例? *我不清楚外顯子/轉錄子字段的內容是否重要。* –

+0

[刪除使用AWK的字段前的空白字符]可能的重複(http://stackoverflow.com/questions/409060/remove-whitespace-before -a-field-awk) – DevD

+0

使用sed和awk有很多方法。已經很少有人回答您使用過的標籤空白和刪除空格。 – DevD

回答

0

的Linux我會用sed的

sed -i '/^exon_id/s/;[\t ]*transcript=/;transcript/' file_name 
     ^-------------------- match lines starting with 'exon_id 
        ^-------- match lines with ;<spaces>transcript= 

的選擇,如果您打算匹配EXONXX,是:

sed -i '/EXON[0-9][0-9]/s/;[\t ]*transcript=/;transcript/' file_name 

ETA:這個表達式可以被細化,也許你應該提供一些你不想匹配的例子。

+0

該文件有太多的信息,甚至插入這裏的一部分。這些是許多的兩列。我只需要將這兩列結合起來,將所有其他列分開,但是在相同的文件中,順序相同。以下是結合兩個目錄時期望的輸出結果:'exon_id = OFAS000007-RA-EXON02; transcript = OFAS000007-RA; exon_id = OFAS000007-RA-EXON05; transcript = OFAS000007-RA; exon_id = OFAS000008-RA-EXON03; transcript = OFAS000008-RA; exon_id = OFAS000017-RA-EXON07; transcript = OFAS000017-RA;' –

+0

@MichaelForthman上述單行程序都會產生所需的輸出,問題在於「模式匹配」需要設置正確級別的細粒度細節正則表達式。這就是爲什麼我需要知道**你想要匹配的線條的獨特之處嗎?** –

+0

@MichaelForthman更新了代碼以匹配標籤。 –