Modifier les colonnes de chaque ligne d'un fichier
irishupk
Messages postés
27
Statut
Membre
-
irishupk Messages postés 27 Statut Membre -
irishupk Messages postés 27 Statut Membre -
Bonjour,
Bonjour,
Mon but est de remplacer chaque colonne de chaque ligne de mon fichier new-vcf.vcf.
voici une partie de mon fichier new-vcf.vcf :
Voici ce que je voudrai :
grâce à de nombreuses recherches, je propose le code suivant :
Cependant, je ne sais pas si c'est la meilleure façon de lire par colonne chaque ligne car comme vous pouvez le voir, le fichier est composé de 49 colonnes.
Dois-je faire le bloc if pour chaque colonne que je souhaite modifier ?
Au départ je pensai utiliser une boucle for mais je ne vois pas comment.
Donc au final, je bloque.
Merci
Bonjour,
Mon but est de remplacer chaque colonne de chaque ligne de mon fichier new-vcf.vcf.
voici une partie de mon fichier new-vcf.vcf :
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
Voici ce que je voudrai :
1 783071 rs142849724 C T . PASS ENSG00000228794;ENST00000624927|ENST00000623808|ENST00000445118|ENST00000448975|ENST00000610067|ENST00000608189|ENST00000609139|ENST00000449005|ENST00000416570|ENST00000623070|ENST00000609009|ENST00000622921 GT C|C C|C T|C C|C T|C C|C C|C C|C C|C C|T C|C C|C C|C C|C C|C C|C C|C C|C C|C C|C C|C C|C C|C C|C C|C C|C C|C C|C C|C C|C C|C C|C C|T C|C C|C C|C C|T C|C C|C C|C
grâce à de nombreuses recherches, je propose le code suivant :
#!/bin/bash
while read line
do
while IFS='\t' read -r colonne1 colonne2 colonne3 REF ALT colonne6 colonne7 colonne8 colonne9 colonne10 colonne11 colonne12 colonne13 colonne14 colonne15 colonne16 colonne17 colonne18 colonne19 colonne20 colonne21 colonne22 colonne23 colonne24 colonne25 colonne26 colonne27 colonne28 colonne29 colonne30 colonne31 colonne32 colonne33 colonne34 colonne35 colonne36 colonne37 colonne38 colonne39 colonne40 colonne41 colonne42 colonne43 colonne44 colonne45 colonne46 colonne47 colonne48 colonne49;
do
if [[ $colonne9 == "0/0" ]]; then
awk '{gsub (/"0/0"/, $REF/$REF, $colonne9}' $line
elif [[ $colonne9 == "1/1" ]]; then
awk '{gsub (/"1/1"/, $ALT/$ALT, $colonne9}' $line
elif [[ $colonne9 == "1/0" ]]; then
awk '{gsub (/"1/0"/, $ALT/$REF, $colonne9}' $line
elif [[ $colonne9 == "0/1" ]]; then
awk '{gsub (/"0/1"/, $REF/$ALT, $colonne9}' $line
fi
if [[ $colonne10 == "0/0" ]]; then
awk '{gsub (/"0/0"/, $REF/$REF, $colonne10}' $line
elif [[ $colonne10 == "1/1" ]]; then
awk '{gsub (/"1/1"/, $ALT/$ALT, $colonne10}' $line
elif [[ $colonne10 == "1/0" ]]; then
awk '{gsub (/"1/0"/, $ALT/$REF, $colonne10}' $line
elif [[ $colonne10 == "0/1" ]]; then
awk '{gsub (/"0/1"/, $REF/$ALT, $colonne10}' $line
fi
done < $line
done < new-vcf.vcf
Cependant, je ne sais pas si c'est la meilleure façon de lire par colonne chaque ligne car comme vous pouvez le voir, le fichier est composé de 49 colonnes.
Dois-je faire le bloc if pour chaque colonne que je souhaite modifier ?
Au départ je pensai utiliser une boucle for mais je ne vois pas comment.
Donc au final, je bloque.
Merci
Configuration: Macintosh / Firefox 67.0
A voir également:
- Modifier les colonnes de chaque ligne d'un fichier
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Modifier dns - Guide
- Comment ouvrir un fichier epub ? - Guide
- Modifier extension fichier - Guide
2 réponses
hello
awk 'BEGIN{FS=OFS="|"} {for(c=12; c<=NF; c++){gsub("^0|0$", "C", $c); gsub("^1|1$", "T", $c)}; print $0}' new-vcf.vcf
1 783071 rs142849724 C T . PASS ENSG00000228794;ENST00000624927|ENST00000623808|ENST00000445118|ENST00000448975|ENST00000610067|ENST00000608189|ENST00000609139|ENST00000449005|ENST00000416570|ENST00000623070|ENST00000609009|ENST00000622921 GT C|C C|C T|C C|C T|C C|C C|C C|C C|C C|T C|C C|C C|C C|C C|C C|C C|C C|C C|C C|C C|C C|C C|C C|C C|C C|C C|C C|C C|C C|C C|C C|C C|T C|C C|C C|C C|T C|C C|C C|C
Le problème a finalement été résolu. Merci quand même. J'ai prévu de me perfectionner dans le langage awk car grâce à l'aide de nombreuses personnes, je me rends compte que c'est un langage très puissant et très utile et je n'ais pas assez de connaissance dans ce langage. C'est pour cela que j'ai acheté l'ouvrage de Arnold Robbins, Effective AWK Programming, 4e .