2014-11-02 87 views
0

後,我有一個列的文件如下圖所示刪除文本分號

chr1 899766 899766 G T exonic;exonic KLHL17 . nonsynonymous SNV;nonsynonymous SNV 

我想以後刪除文本「;」在列6和9.輸出應該看起來像:

chr1 899766 899766 G T exonic KLHL17 . nonsynonymous SNV 

有人可以給一個Linux命令來解決這個問題。

+0

從您的問題示例中不清楚列分隔符是什麼。它是一個製表符,還是兩個或多個空格或可能是其他的? – 2014-11-02 20:32:47

回答

0

這將刪除包含;以及在任何字段後的部分,假定字段由製表符分隔。

sed 's/;[^\t]*//g' <file> 

如果你想這樣做只是在第6和第9個字段:所需的輸入

perl -lne '@F=split/\t/;$F[$_]=~s/;.*// for(5,8);print join"\t",@F' <file> 
+0

這是一個製表符分隔的文件,我只想刪除特定的列。它不應該用;刪除任何字段。 – chas 2014-11-02 20:52:06

+0

謝謝,perl腳本works.sed命令沒有按預期工作,輸出看起來像「exonicxonic」和「nonsynonymous SNVonsynonymous SNV」 – chas 2014-11-05 08:55:38

+0

對不起,只是修復了sed版本。 – SzG 2014-11-06 21:14:12

0

,我已經使用sed

echo "chr1 899766 899766 G T exonic;exonic KLHL17 . nonsynonymous SNV;nonsynonymous SNV" | sed 's/;[a-zA-Z]* [a-zA-Z]*//g' 

輸出

chr1 899766 899766 G T exonic KLHL17 . nonsynonymous SNV 

它只會k代表「word;word」或「word word;word word