Menu

Suppression de ligne dans fichier selon pattern dans colonne précise [Résolu]

Messages postés
19
Date d'inscription
vendredi 13 avril 2018
Statut
Membre
Dernière intervention
22 mai 2019
-
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 :

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
Afficher la suite 

Votre réponse

1 réponse

Messages postés
36527
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
22 mai 2019
3545
0
Merci
Salut,

$ 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.
irishupk
Messages postés
19
Date d'inscription
vendredi 13 avril 2018
Statut
Membre
Dernière intervention
22 mai 2019
-
Je te remercie énormément, c'est pile ce que je voulais ! Merci ! (tu me libère de plusieures heures de recherches !)
lEprofSonDkon
Messages postés
170
Date d'inscription
jeudi 13 décembre 2018
Statut
Membre
Dernière intervention
22 mai 2019
6 -
KISS!
awk '$3!="."' fich
> lEprofSonDkon
Messages postés
170
Date d'inscription
jeudi 13 décembre 2018
Statut
Membre
Dernière intervention
22 mai 2019
-
Merci pour cette autre solution !
Commenter la réponse de zipe31