0

我正在尝试从以下位置操作此文本文件:

>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 来获取它,但是我无法获得第一行所需的空格或确切信息的组合(没有它程序就无法工作)

谢谢哈丽特

4

3 回答 3

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,试试看。

于 2013-03-04T10:36:41.197 回答
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
> 
于 2013-03-04T10:42:36.820 回答
0

使用 awk(因为 Kent 提供了 sed 解决方案)

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

要将第一个空格更改为下划线,请添加另一个子:

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

sed 可能是解决此问题的更好方法。

于 2013-03-04T10:44:39.600 回答