заменить содержимое столбца на содержимое переменной - PullRequest
0 голосов
/ 06 июня 2019

Моя конечная цель - заменить для каждой строки файла GQPDOMB_impute_copie.vcf информационный столбец (столбец 8 файла GQPDOMB_impute_copie.vcf) содержимым столбцов 2 и 3 файла formatting.txt:

Это моя идея:

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

1 Ответ

1 голос
/ 06 июня 2019

Не показывая нам ожидаемый результат, мы угадываем, что вы хотите, но, возможно, это оно:

$ 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...