2013-03-01 79 views
1

我再次被修改文本卡住了。我想改變大的文本文件,如這些:用Unix命令行工具修改FASTA頭文件

>hg19_ct_UserTrack_3545_691 range=chr1:8121498-8121502 5'pad=0 3'pad=0 strand=+ repeatMasking=none 
GATGG 
>hg19_ct_UserTrack_3545_690 range=chr1:8121587-8121591 5'pad=0 3'pad=0 strand=+ repeatMasking=none 
GATAG 

>chr1:8121498-8121502 5'pad=0 3'pad=0 strand=+ repeatMasking=none 
GATGG 
>chr1:8121587-8121591 5'pad=0 3'pad=0 strand=+ repeatMasking=none 
GATAG 

我一直在使用sed '/^>/s/[^ ]* />/'從而消除第一部分(>hg19_ct_UserTrack_3545_690),但我真的停留在如何去除range=。我嘗試過//grep的各種組合,但沒有快樂。

感謝

回答

1

嘗試這一行:

sed 's/[^=>]*=//' file 

測試與你輸入:

kent$ echo ">hg19_ct_UserTrack_3545_691 range=chr1:8121498-8121502 5'pad=0 3'pad=0 strand=+ repeatMasking=none 
GATGG 
>hg19_ct_UserTrack_3545_690 range=chr1:8121587-8121591 5'pad=0 3'pad=0 strand=+ repeatMasking=none 
GATAG"|sed 's/[^=>]*=//' 
>chr1:8121498-8121502 5'pad=0 3'pad=0 strand=+ repeatMasking=none 
GATGG 
>chr1:8121587-8121591 5'pad=0 3'pad=0 strand=+ repeatMasking=none 
GATAG 
+0

這太棒了,謝謝! – user1879573 2013-03-01 10:55:21

1

嘗試這些不同的shell命令的=)

隨着

awk -F'range=' '/^>/{print ">" $2}' file 

或者與

sed '/^>/s/.*range=(.*)/>\1/' file 
+0

這些無法正常工作,因爲他們離開了「>」字符。 awk和GNU grep與perl正則表達式將省略非「>」行... – Scrutinizer 2013-03-01 12:43:45

+0

文章相應地編輯。誤解了你的問題,對不起) – 2013-03-01 12:49:47

+0

你可能對於BSD sed或者GNU sed(或者對於GNU sed來說是'sed -r')sed -E' ...... – Scrutinizer 2013-03-01 12:59:05