Я редактирую файл с помощью sed
и сталкивался с проблемой, надеюсь, что 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
Nex т, что я хочу сделать, это, возьмите вышеуказанный файл в качестве входных данных и добавьте ;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}'
Может ли один Pls помочь мне решить эту головоломку?
Заранее благодарен!
Prashant
Посмотрите вариант GNU sed '-i'. – Cyrus
Ни #, ни
Спасибо, ред. Я очень новичок в этом, но я думаю, что sed/awk - очень мощные редакторы, и я хочу их изучить. В настоящее время я больше разбираюсь в таких параллельных технологиях, как Hadoop/Spark. Есть ли хорошие учебные ресурсы для awk + GNU Parallel? – PRP