2014-11-03 15 views
0

我有一個製表符分隔的文件,列如下所示。使用linux命令修改列中的文本

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

'sed'或'awk'都是爲此設計的。 – 2014-11-03 20:54:26

回答

0

您可以使用下面的命令sed

sed 's/;[^\t]\+//g' your-log-file > new-file-name 

這意味着「一個分號後刪除一切達(但不包括)下一個標籤」。輸出將轉到new-file-name。如果你想編輯就地your-log-file(一旦你確定了命令的工作,你想讓它,你可以做以下的方式:

sed -i 's/;[^\t]\+//g' your-log-file 

您還可以使用awk,雖然我與不太熟悉的程序。這裏是一個簡要的概述:http://www.cyberciti.biz/faq/howto-delete-word-using-sed-under-unix-linux-bsd-appleosx/

+0

感謝您的時間。不幸的是,上面的sed命令沒有做任務。 – chas 2014-11-03 21:20:51

+0

我正在使用' sed(GNU sed)4.2.2'在'GNU bash上,版本4.3.30'(在Arch Linux上)。你正在使用什麼版本? – 2014-11-03 21:44:36

+0

即時通訊在mac os上使用它。該命令運行時沒有任何錯誤bu輸出保持不變。 – chas 2014-11-04 08:15:24