首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >sed & regex表达式

sed & regex表达式
EN

Stack Overflow用户
提问于 2018-06-01 22:00:09
回答 3查看 131关注 0票数 0

我试图在不存在的行中添加一个'chr‘字符串。此操作仅在没有'##‘的行中是必需的。首先,我使用grep + sed命令,如下所示,但我希望运行该命令来覆盖原始文件。

代码语言:javascript
复制
grep -v "^#" 5b110660bf55f80059c0ef52.vcf | grep -v 'chr' | sed 's/^/chr/g'

因此,要在文件中运行该命令,我编写以下代码:

代码语言:javascript
复制
sed -i -E '/^#.*$|^chr.*$/ s/^/chr/' 5b110660bf55f80059c0ef52.vcf

这是vcf文件的内容。

代码语言:javascript
复制
##FORMAT=<ID=DP4,Number=4,Type=Integer,Description="#ref plus strand,#ref minus strand, #alt plus strand, #alt minus strand">
#CHROM  POS ID  REF ALT QUAL    FILTER  INFO    FORMAT  24430-0009S21_GM17-12140
1   955597  95692   G   T   1382    PASS    VARTYPE=1;BGN=0.00134309;ARL=150;DER=53;DEA=55;QR=40;QA=39;PBP=1091;PBM=300;TYPE=SNP;DBXREF=dbSNP:rs115173026,g1000:0.2825,esp5400:0.2755,ExAC:0.2290,clinvar:rs115173026,CLNSIG:2,CLNREVSTAT:mult,CLNSIGLAB:Benign;SGVEP=AGRN|+|NM_198576|1|c.45G>T|p.:(p.Pro15Pro)|synonymous GT:DP:AD:DP4    0/1:125:64,61:50,14,48,13
chr1    957898  82729935    G   T   1214    off_target  VARTYPE=1;BGN=0.00113362;ARL=149;DER=50;DEA=55;QR=38;QA=40;PBP=245;PBM=978;NVF=0.53;TYPE=SNP;DBXREF=dbSNP:rs2799064,g1000:0.3285;SGVEP=AGRN|+|NM_198576|2|c.463+56G>T|.|intronic    GT:DP:AD:DP4    0/1:98:47,51:9,38,10,41
EN

回答 3

Stack Overflow用户

发布于 2018-06-01 22:56:47

如果我知道您的预期结果是什么,请尝试:

代码语言:javascript
复制
sed -ri '/^(#|chr)/! s/^/chr/' file
票数 1
EN

Stack Overflow用户

发布于 2018-06-01 22:27:04

这可以通过一次sed调用来完成。脚本本身类似于以下内容。

如果你有一个格式的输入

代码语言:javascript
复制
$ echo -e '#\n#\n123chr456\n789chr123\nabc'
#
#
123chr456
789chr123
abc

然后,将chr预先添加到未注释的无chr行,如下所示

代码语言:javascript
复制
$ echo -e '#\n#\n123chr456\n789chr123\nabc' | sed '/^#/ {p
d
}
/chr/ {p
d
}
s/^/chr/'

哪种打印

代码语言:javascript
复制
#
#
123chr456
789chr123
chrabc

(请注意多行sed脚本。)

现在,您只需要在文件上就地运行此脚本(在现代sed版本中为-i)。

票数 0
EN

Stack Overflow用户

发布于 2018-06-01 22:55:50

您的问题不清楚,并且您没有提供预期的输出,因此我们无法测试潜在的解决方案,但是如果您想要的只是将chr添加到尚未出现且不以#开头的行的开头,那么只需:

代码语言:javascript
复制
awk '!/^(#|chr)/{$0="chr" $0} 1' file

要使用GNU awk覆盖原始文件,请执行以下操作:

代码语言:javascript
复制
awk -i inplace '!/^(#|chr)/{$0="chr" $0} 1' file

和任何awk:

代码语言:javascript
复制
awk '!/^(#|chr)/{$0="chr" $0} 1' file > tmp && mv tmp file
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50645124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档