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

谢谢哈里特

如果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开头的行,试试吧。

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

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

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

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

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

下面做了一个适当的替换。在您执行命令之后。文件将被修改。

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
> 

最新更新