Suppression de ligne dans fichier selon pattern dans colonne précise
Résolu
Bonjour,
Après de nombreuses recherches et essais, je me retourne vers vous.
Je souhaiterai supprimer les ligne de mon fichier qui contiennent le caractère . dans la colonne 3.
Voici à quoi ressemble mon fichier :
Ainsi, si la ligne contient dans la troisième colonne un rs, on ne touche à rien mais si la ligne contient un . dans la troisième colonne, alors on la supprime pour au final avoir un fichier de la forme :
Donc au final je souhaite supprimer toutes les lignes avec . dans la troisième colonne.
voilà ce que j'ai entre autre essayé :
Merci d'avance
EDIT :
avec les ligne suivantes, j'ai réussi à récupérer les ligne qui correspondent à ma condition mais je n'arrive pas à les supprimer par la suite :
Supprimer les ligne de 1 à 63 :
Récupérer le premier champ avec : pour délimiteur
Ensuite je pense qu'il faudrait un script comme celui qui suit mais il ne fait pas ce que je veux :
Après de nombreuses recherches et essais, je me retourne vers vous.
Je souhaiterai supprimer les ligne de mon fichier qui contiennent le caractère . dans la colonne 3.
Voici à quoi ressemble mon fichier :
1 899634 rs114053887 C T . . BIOMART_COORDS=1:899634:899634 0/1:T=6,C=21:0:27:heterozygous 0/0:C=46:0:46:homozygous
1 900285 rs4970435 C T . . BIOMART_COORDS=1:900285:9002851/1:T=22:0:22:homozygous 1/1:T=3:3:3:homozygous
1 900382 . C . . . BIOMART_COORDS=1:900382:900382;GENE=ENSG00000187961 0/0:C=76:0:76:homozygous 0/0:C=81:0:81:homozygous 0/0:C=63:0:63:homozygous 0/0:C=56:0:56:homozygous 0/0:C=91:0:91:homozygous
1 900286 rs4970434 A G . . BIOMART_COORDS=1:900286:900286 1/1:G=49:0:49:homozygous 0/1:A=7,G=22:0:29:heterozygous 1/1:G=22:0:22:homozygous 1/1:G=3:3:3:homozygous 1/1:G=24:0:24:homozygous
Ainsi, si la ligne contient dans la troisième colonne un rs, on ne touche à rien mais si la ligne contient un . dans la troisième colonne, alors on la supprime pour au final avoir un fichier de la forme :
1 899634 rs114053887 C T . . BIOMART_COORDS=1:899634:899634 0/1:T=6,C=21:0:27:heterozygous 0/0:C=46:0:46:homozygous
1 900285 rs4970435 C T . . BIOMART_COORDS=1:900285:9002851/1:T=22:0:22:homozygous 1/1:T=3:3:3:homozygous
1 900286 rs4970434 A G . . BIOMART_COORDS=1:900286:900286 1/1:G=49:0:49:homozygous 0/1:A=7,G=22:0:29:heterozygous 1/1:G=22:0:22:homozygous 1/1:G=3:3:3:homozygous 1/1:G=24:0:24:homozygous
Donc au final je souhaite supprimer toutes les lignes avec . dans la troisième colonne.
voilà ce que j'ai entre autre essayé :
while read line
do
echo -e "$line"
a=$(awk -F \t '$3 ~ /\./' GQPDOMB_verifie.vcf | awk '{print $3}')
if test -n "$a"
then
sed '$a d' GQPDOMB_verifie.vcf
echo "ok "
fi
done < GQPDOMB_verifie.vcf
Merci d'avance
EDIT :
avec les ligne suivantes, j'ai réussi à récupérer les ligne qui correspondent à ma condition mais je n'arrive pas à les supprimer par la suite :
cat GQPDOMB_verifie.vcf | cut -d$'\t' -f3 | grep -n "\." >nb_ligne.txt
Supprimer les ligne de 1 à 63 :
sed '1,63d' nb_ligne.txt >nb_ligne_sans_entete.txt
Récupérer le premier champ avec : pour délimiteur
cut -d ":" -f 1 nb_ligne_sans_entete.txt >ligne.txt
Ensuite je pense qu'il faudrait un script comme celui qui suit mais il ne fait pas ce que je veux :
while read line do sed -n "$line p" GQPDOMB_verifie.vcf done < ligne.txt
Configuration: Windows / Firefox 60.0
1 réponse
-
ContributeurSalut,
$ awk '$3 !~ /\./ { print $0 }' fich
1 899634 rs114053887 C T . . BIOMART_COORDS=1:899634:899634 0/1:T=6,C=21:0:27:heterozygous 0/0:C=46:0:46:homozygous
1 900285 rs4970435 C T . . BIOMART_COORDS=1:900285:9002851/1:T=22:0:22:homozygous 1/1:T=3:3:3:homozygous
1 900286 rs4970434 A G . . BIOMART_COORDS=1:900286:900286 1/1:G=49:0:49:homozygous 0/1:A=7,G=22:0:29:heterozygous 1/1:G=22:0:22:homozygous 1/1:G=3:3:3:homozygous 1/1:G=24:0:24:homozygous
Apparemment ton délimiteur de champs est la tabulation. Dans l'exemple de fichier que tu as mis, c'est l'espace. Donc à adapter à ton fichier.
Si tu as une version de awk supérieure à 4.1.0, il existe la même fonctionnalité que "sed", à savoir l'option "--in-place" qui permet de modifier le fichier original; Sinon, il te faudra passer par un fichier temporaire.
-
-
-
@lEprofSonDkonMerci pour cette autre solution !
-