2013-03-04 70 views
0

我試圖操縱從這個文本文件:修改/文本操作使用SED,AWK或者vim

>hg19_ct_UserTrack_3545_MACS_peak_2 range=chr1:777590-777790 5'pad=0 3'pad=0 strand=+ repeatMasking=none 
TCCACCCACCGAAGTTGTTTGGTCCCAATCTGCAAAATCAGTTAAACGTC 
TTCCTGCCTGGCAGCAGATCAAAGGGTGAGGGGTCTGGGACAGACAGAGA 
CGGCTAGAGAATGGATGGTGAAGTGCTCAGAGGCCCTGTGGGCTATCCCA 

>MACS_peak_2_range=chr1:777590-777790 5'pad=0 3'pad=0 strand=+ repeatMasking=none 
TCCACCCACCGAAGTTGTTTGGTCCCAATCTGCAAAATCAGTTAAACGTC 
TTCCTGCCTGGCAGCAGATCAAAGGGTGAGGGGTCTGGGACAGACAGAGA 
CGGCTAGAGAATGGATGGTGAAGTGCTCAGAGGCCCTGTGGGCTATCCCA 

我一直在使用SED和Vim得到它,但我不能得到我需要的第一行的空格或準確信息的組合(程序不工作沒有它)

謝謝 哈里特

+1

是'MACS_peak_2'動態?這部分是否有任何規定? – Kent 2013-03-04 10:34:34

+0

據我所知,沒有規則;在xx的峯值處,DNA序列在標題 – user1879573 2013-03-04 10:46:36

回答

0

使用AWK(因爲肯特提供的SED溶液)

awk '/^>/sub(/hg19_ct_UserTrack_3545_/, "")' input 

要改變第一空間到下劃線,加另一子:

awk '/^>/sub(/hg19_ct_UserTrack_3545_/, "");sub(/ /, "_")' input 

sed可能是一個be解決這個問題。

+0

根據示例,還有一個空間需要更改爲'peak_2'和'range'之間的下劃線。 – Scrutinizer 2013-03-04 11:04:41

1

如果MACS_peak_2是固定的字符串:

sed 's/>.*MACS/>MACS/; s/ /_/' file 

會做的工作:

kent$ echo ">hg19_ct_UserTrack_3545_MACS_peak_2 range=chr1:777590-777790 5'pad=0 3'pad=0 strand=+ repeatMasking=none 
TCCACCCACCGAAGTTGTTTGGTCCCAATCTGCAAAATCAGTTAAACGTC 
TTCCTGCCTGGCAGCAGATCAAAGGGTGAGGGGTCTGGGACAGACAGAGA 
CGGCTAGAGAATGGATGGTGAAGTGCTCAGAGGCCCTGTGGGCTATCCCA"|sed 's/>.*MACS/>MACS/; s/ /_/' 
>MACS_peak_2_range=chr1:777590-777790 5'pad=0 3'pad=0 strand=+ repeatMasking=none 
TCCACCCACCGAAGTTGTTTGGTCCCAATCTGCAAAATCAGTTAAACGTC 
TTCCTGCCTGGCAGCAGATCAAAGGGTGAGGGGTCTGGGACAGACAGAGA 
CGGCTAGAGAATGGATGGTGAAGTGCTCAGAGGCCCTGTGGGCTATCCCA 

,如果你想做到這一點在VIM

:g/^>hg/s/hg.*MAC/MAC/|s/ /_/ 

此行會替換所有以>hg開頭的行,試試吧。

+0

下方列出。否,MACS_peak_2不固定,MACS_peak部分是數字改變(它們基本上是從下面的文本中提取的座標的名稱) – user1879573 2013-03-04 10:41:02

+0

好的,無所謂,只要MACS是固定的,這兩種解決方案都適合你。嘗試一下。 – Kent 2013-03-04 10:44:33

+0

謝謝。我已經試過Vim的,但我得到一個奇特的標題:> MACS_peak_718_range = chr19_gl000208_random:192-392 5'pad = 0 3'pad = 0股= + repeatMasking =無 AATGAACCCTTGCAGATACTAGAGAAAGACTGTTTCAAAACTGCTCTATC 我需要保持MACS_peak_2_range = CHR1:777590 -777790完全一樣。謝謝 – user1879573 2013-03-04 10:47:57

0

下面做一個就地替換。在你執行命令後,文件將被改變。

perl -pe 's/^\>.*?(MACS_peak.*)/>$1/g' your_file 

看到測試下面:

> cat temp 
>hg19_ct_UserTrack_3545_MACS_peak_2 range=chr1:777590-777790 5'pad=0 3'pad=0 strand=+ repeatMasking=none 
TCCACCCACCGAAGTTGTTTGGTCCCAATCTGCAAAATCAGTTAAACGTC 
TTCCTGCCTGGCAGCAGATCAAAGGGTGAGGGGTCTGGGACAGACAGAGA 
CGGCTAGAGAATGGATGGTGAAGTGCTCAGAGGCCCTGTGGGCTATCCCA 
> 
> 
> 
> 
> perl -pe 's/^\>.*?(MACS_peak.*)/>$1/g' temp 
>MACS_peak_2 range=chr1:777590-777790 5'pad=0 3'pad=0 strand=+ repeatMasking=none 
TCCACCCACCGAAGTTGTTTGGTCCCAATCTGCAAAATCAGTTAAACGTC 
TTCCTGCCTGGCAGCAGATCAAAGGGTGAGGGGTCTGGGACAGACAGAGA 
CGGCTAGAGAATGGATGGTGAAGTGCTCAGAGGCCCTGTGGGCTATCCCA 
> 
> 
> 
> perl -pi -e 's/^\>.*?(MACS_peak.*)/>$1/g' temp 
> 
> 
> 
> cat temp 
>MACS_peak_2 range=chr1:777590-777790 5'pad=0 3'pad=0 strand=+ repeatMasking=none 
TCCACCCACCGAAGTTGTTTGGTCCCAATCTGCAAAATCAGTTAAACGTC 
TTCCTGCCTGGCAGCAGATCAAAGGGTGAGGGGTCTGGGACAGACAGAGA 
CGGCTAGAGAATGGATGGTGAAGTGCTCAGAGGCCCTGTGGGCTATCCCA 
>