Suppression de ligne dans fichier selon pattern dans colonne précise

Résolu/Fermé
irishupk Messages postés 25 Date d'inscription vendredi 13 avril 2018 Statut Membre Dernière intervention 29 juin 2020 - Modifié le 2 mai 2019 à 17:55
 irishupk - 3 mai 2019 à 08:38
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
A voir également:

1 réponse

zipe31 Messages postés 36317 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 568
2 mai 2019 à 18:04
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.
0
irishupk Messages postés 25 Date d'inscription vendredi 13 avril 2018 Statut Membre Dernière intervention 29 juin 2020
2 mai 2019 à 18:21
Je te remercie énormément, c'est pile ce que je voulais ! Merci ! (tu me libère de plusieures heures de recherches !)
0
lEprofSonDkon Messages postés 211 Date d'inscription jeudi 13 décembre 2018 Statut Membre Dernière intervention 8 octobre 2022 14
2 mai 2019 à 23:54
KISS!
awk '$3!="."' fich
0
irishupk > lEprofSonDkon Messages postés 211 Date d'inscription jeudi 13 décembre 2018 Statut Membre Dernière intervention 8 octobre 2022
3 mai 2019 à 08:38
Merci pour cette autre solution !
0