我的最终目标是,将GQPDOMB_impute_copie.vcf文件的每一行的info列(GQPDOMB_impute_copie.vcf文件的第8列)替换为formatting.txt文件的第2列和第3列的内容:>
那是我的主意:
For each line of the GQPDOMB_impute_copie.vcf file
do
the variable rs retrieves the rsID of the current line in column 3 of the GQPDOMB_impute_copie.vcf file
The variable VAR1 searches for the content of the variable rs in the formatting.txt file for each line
if the variable is not empty (the content of rs for this line has been found in the formatting.txt file)
so
the ra variable recovers the contents of columns 2 and 3 of the formatting.txt file
The content of column 8 of the current row is replaced by the content of the variable ra (which contains the information contained in columns 2 and 3 of formatting.txt)
fi
done
GQPDOMB_impute_copie.vcf:
##fileformat=VCFv4.3
1 783071 rs142849724 C T . PASS TYPED;RefPanelAF=0.018571;AN=80;AC=5;INFO=1 GT 0|0 0|0 1|0 0|0 1|0 0|0 0|0 0|0 0|0 0|1 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|1 0|0 0|0 0|0 0|1 0|0 0|0 0|0
1 783186 rs141989890 G C . PASS RefPanelAF=0.000323375;AN=80;AC=0;INFO=1 GT 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0
1 783632 rs193023236 G A . PASS RefPanelAF=0.00040037;AN=80;AC=0;INFO=1 GT 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0
formating.txt:
rs142849724;ENSG00000228794;ENST00000624927|ENST00000623808|ENST00000445118|ENST00000448975|ENST00000610067|ENST00000608189|ENST00000609139|ENST00000449005|ENST00000416570|ENST00000623070|ENST00000609009|ENST00000622921
rs141989890;ENSG00000228794;ENST00000624927|ENST00000623808|ENST00000445118|ENST00000448975|ENST00000610067|ENST00000608189|ENST00000609139|ENST00000449005|ENST00000416570|ENST00000623070|ENST00000609009|ENST00000622921
rs193023236;ENSG00000228794;ENST00000624927|ENST00000623808|ENST00000445118|ENST00000448975|ENST00000610067|ENST00000608189|ENST00000609139|ENST00000449005|ENST00000416570|ENST00000623070|ENST00000609009|ENST00000622921
经过互联网上的大量研究,以下是我可以为您提供的代码:
#!/bin/bash
while read line
do
rs=$(awk -F '\t' '{print $3}' GQPDOMB_impute_copie.vcf) #recovery rsID
VAR1=$(grep "${rs}" formating.txt) #we check if the rsID of the current line is found in the file formatting.txt
if [ -n "$VAR1" ] ; #if the rsID of the current line has been found
then
ra=$(grep "${rs}" formating.txt | awk -F ';' '{print $2,";",$3}') #recovery of the contents of columns 2 and 3 of the formating.txt file in the same vaiable
awk -F '\t' -v t="\"$ra\"" '{$8=t; print }' OFS='\t' GQPDOMB_impute_copie.vcf #replace the content of the column 8 (info) with the content of the prévious var
fi
done < GQPDOMB_impute_copie.vcf
但是,我认为程序无法逐行读取vcf文件,并且无法成功创建变量VAR1。这是返回给我的错误:
./script-info.sh: line 16: /usr/bin/grep: Argument list too long
./script-info.sh: line 16: /usr/bin/grep: Argument list too long
./script-info.sh: line 16: /usr/bin/grep: Argument list too long
如何成功创建此脚本,并在可能的情况下尽可能高效地完成
?谢谢你。
编辑 :如您所愿,这就是我想要恢复输出文件的方式:
##fileformat=VCFv4.3
1 783071 rs142849724 C T . PASS ENSG00000228794;ENST00000624927|ENST00000623808|ENST00000445118|ENST00000448975|ENST00000610067|ENST00000608189|ENST00000609139|ENST00000449005|ENST00000416570|ENST00000623070|ENST00000609009|ENST00000622921
GT 0|0 0|0 1|0 0|0 1|0 0|0 0|0 0|0 0|0 0|1 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|1 0|0 0|0 0|0 0|1 0|0 0|0 0|0
1 783186 rs141989890 G C . PASS ENSG00000228794;ENST00000624927|ENST00000623808|ENST00000445118|ENST00000448975|ENST00000610067|ENST00000608189|ENST00000609139|ENST00000449005|ENST00000416570|ENST00000623070|ENST00000609009|ENST00000622921 GT 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0
1 783632 rs193023236 G A . PASS ENSG00000228794;ENST00000624927|ENST00000623808|ENST00000445118|ENST00000448975|ENST00000610067|ENST00000608189|ENST00000609139|ENST00000449005|ENST00000416570|ENST00000623070|ENST00000609009|ENST00000622921 GT 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0
答案 0 :(得分:1)
没有向我们显示预期的输出,我们正在猜测您想要的是什么,但是也许是这样:
$ cat tst.awk
BEGIN { FS=";" }
NR==FNR { val[$1] = $2 FS $3; next }
FNR==1 { FS=OFS="\t"; $0=$0 }
!/^#/ { $8 = ($3 in val ? val[$3] : $8) }
{ print }
$ awk -f tst.awk formatting.txt GQPDOMB_impute_copie.vcf
##fileformat=VCFv4.3
1 783071 rs142849724 C T . PASS ENSG00000228794;ENST00000624927|ENST00000623808|ENST00000445118|ENST00000448975|ENST00000610067|ENST00000608189|ENST00000609139|ENST00000449005|ENST00000416570|ENST00000623070|ENST00000609009|ENST00000622921 GT 0|0 0|0 1|0 0|0 1|0 0|0 0|0 0|0 0|0 0|1 0|0 0|00|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|00|0 0|0 0|0 0|0 0|1 0|0 0|0 0|0 0|1 0|0 0|0 0|0
1 783186 rs141989890 G C . PASS ENSG00000228794;ENST00000624927|ENST00000623808|ENST00000445118|ENST00000448975|ENST00000610067|ENST00000608189|ENST00000609139|ENST00000449005|ENST00000416570|ENST00000623070|ENST00000609009|ENST00000622921 GT 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|00|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|00|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0
1 783632 rs193023236 G A . PASS ENSG00000228794;ENST00000624927|ENST00000623808|ENST00000445118|ENST00000448975|ENST00000610067|ENST00000608189|ENST00000609139|ENST00000449005|ENST00000416570|ENST00000623070|ENST00000609009|ENST00000622921 GT 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|00|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|00|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0 0|0