gpt4 book ai didi

bash - 使用 sed 编辑非结构化文件

转载 作者:行者123 更新时间:2023-11-29 09:51:41 27 4
gpt4 key购买 nike

我正在使用 sed 编辑文件并且遇到了一个问题,希望 sed 大师应该能够解决这个问题。

我有一个非结构化/部分结构化的文件,如下所示

##INFO=<ID=EX_TARGET,Number=0,Type=Flag,Description="indicates whether a variant is within the exon pull down target boundaries">
##INFO=<ID=MULTI_ALLELIC,Number=0,Type=Flag,Description="indicates whether a site is multi-allelic">
##source_20160901.1=vcf-subset(r940) -f -c HG02291 /net/isilonP/public/rw/ensembl/1000genomes/release-17/tmp/slicer/1.1-1000000.ALL.chr1.phase3_shapeit2_mvncall_integrated_v5a.20130502.genotypes.vcf.gz
#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT HG02291
1 10177 rs367896724 A AC 100 PASS AA=1 GT 1|0
1 10235 rs540431307 T TA 100 PASS XX=5 GT 0|0
1 10352 rs555500075 T TA 100 PASS JJ=7 GT 0|1

我已使用以下命令向文件中插入一行

sed 's/.*##source_.*/\#\#INFO=\<ID=P_ID\,Number=1\,Type=String\,Description=\"Person Identifier\"\>\n&/' infile > outfile

输出看起来像这样

##INFO=<ID=EX_TARGET,Number=0,Type=Flag,Description="indicates whether a variant is within the exon pull down target boundaries">
##INFO=<ID=MULTI_ALLELIC,Number=0,Type=Flag,Description="indicates whether a site is multi-allelic">
##INFO=<ID=P_ID,Number=1,Type=String,Description="Patient Identifier">
##source_20160901.1=vcf-subset(r940) -f -c HG02291 /net/isilonP/public/rw/ensembl/1000genomes/release-17/tmp/slicer/1.1-1000000.ALL.chr1.phase3_shapeit2_mvncall_integrated_v5a.20130502.genotypes.vcf.gz
#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT HG02291
1 10177 rs367896724 A AC 100 PASS AA=1 GT 1|0
1 10235 rs540431307 T TA 100 PASS XX=5 GT 0|0
1 10352 rs555500075 T TA 100 PASS JJ=7 GT 0|1

接下来我要做的是,将上述文件作为输入并附加 ;P_ID=12345到第 8 列,即 AA=1 , XX=5 , JJ=7

输出应该是这样的-

##INFO=<ID=EX_TARGET,Number=0,Type=Flag,Description="indicates whether a variant is within the exon pull down target boundaries">
##INFO=<ID=MULTI_ALLELIC,Number=0,Type=Flag,Description="indicates whether a site is multi-allelic">
##INFO=<ID=P_ID,Number=1,Type=String,Description="Patient Identifier">
##source_20160901.1=vcf-subset(r940) -f -c HG02291 /net/isilonP/public/rw/ensembl/1000genomes/release-17/tmp/slicer/1.1-1000000.ALL.chr1.phase3_shapeit2_mvncall_integrated_v5a.20130502.genotypes.vcf.gz
#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT HG02291
1 10177 rs367896724 A AC 100 PASS AA=1;P_ID=12345 GT 1|0
1 10235 rs540431307 T TA 100 PASS XX=5;P_ID=12345 GT 0|0
1 10352 rs555500075 T TA 100 PASS JJ=7;P_ID=12345 GT 0|1

到目前为止,我已经设法选择了第 8 列,但我不确定如何在附加信息后将更新的行放回文件中。

这就是我选择第 8 列的方式 -

sed -re '{s/^(\S+\s+){7}(\S+).*$/\2/;p}'

谁能帮我解决这个难题?

提前致谢!

普拉尚

最佳答案

sed -re '{s/^((\S+ +){7}\S+)/\1;P_ID=12345/}' /tmp/so5.txt

其中 /tmp/so5.txt 是您的输入文件。

关于bash - 使用 sed 编辑非结构化文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39309796/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com