Jos*_* M. 2 regex awk sed bioinformatics gawk
背景
均聚物是具有连续相同碱基的DNA的亚序列,如AAAAAAA.python中的示例用于提取它:
import re
DNA = "ACCCGGGTTTAACCGGACCCAA"
homopolymers = re.findall('A+|T+|C+|G+', DNA)
print homopolymers
['A', 'CCC', 'GGG', 'TTT', 'AA', 'CC', 'GG', 'A', 'CCC', 'AA']
Run Code Online (Sandbox Code Playgroud)
我的努力
我制作了一个解决问题的gawk脚本,但没有使用正则表达式:
echo "ACCCGGGTTTAACCGGACCCAA" | gawk '
BEGIN{
FS=""
}
{
homopolymer = $1;
base = $1;
for(i=2; i<=NF; i++){
if($i == base){
homopolymer = homopolymer""base;
}else{
print homopolymer;
homopolymer = $i;
base = $i;
}
}
print homopolymer;
}'
Run Code Online (Sandbox Code Playgroud)
产量
A CCC GGG TTT AA CC GG A CCC AA
题
如何在awk或sed中使用正则表达式,得到相同的结果?
grep -o 会让你在一线:
echo "ACCCGGGTTTAACCGGACCCAA"| grep -ioE '([A-Z])\1*'
A
CCC
GGG
TTT
AA
CC
GG
A
CCC
AA
Run Code Online (Sandbox Code Playgroud)
说明:
([A-Z]) # matches and captures a letter in matched group #1
\1* # matches 0 or more of captured group #1 using back-reference \1
Run Code Online (Sandbox Code Playgroud)
sed 不是最好的工具,但OP已经要求它:
echo "ACCCGGGTTTAACCGGACCCAA" | sed -r 's/([A-Z])\1*/&\n/g'
A
CCC
GGG
TTT
AA
CC
GG
A
CCC
AA
Run Code Online (Sandbox Code Playgroud)
PS:这是gnu-sed.
| 归档时间: |
|
| 查看次数: |
322 次 |
| 最近记录: |