Recherche de motif et impression de colonne

Fermé
irishupk Messages postés 25 Date d'inscription vendredi 13 avril 2018 Statut Membre Dernière intervention 29 juin 2020 - Modifié le 30 avril 2018 à 07:54
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 - 30 avril 2018 à 08:12
Bonjour à tous ,

Je me permets de solliciter votre aide. En effet, j'ai précédemment déjà été bloquée par ce même genre de question.

Voici le problème : je possède deux fichiers :

ort.csv
AGAP002556
AGAP010489
NA
NA
NA
NA
NA
AGAP012320
AGAP010409
AGAP011647
NA
NA


et
BD.csv qui me sert de base de données

AGAP002189;agamobp14;Q8I8T3;188;2R;17331871;17332553;Classic;mclassic9;NA;aaegobp18;cquiobp63
AGAP008398;agamobp21;Q8I8S3;131;3R;10317255;10317835;Classic;mclassic5;NA;aaegobp8;cquiobp23
AGAP010409;agamobp22;Q7PGA3;144;3L;2853087;2853645;Classic;mclassic8;NA;aaegobp81;cquiobp44
AGAP012318;agamobp23;Q8I8R9;131;3L;40168852;40169329;Classic;mclassic3;NA;aaegobp9;cquiobp22
AGAP012319;agamobp24;Q8I8R8;176;3L;40171315;40172237;Classic;mclassic2;NA;aaegobp77;cquiobp21
AGAP012320;agamobp25;Q7Q088;142;3L;40209434;40210326;Classic;mclassic3;NA;aaegobp11;cquiobp19
AGAP012321;agamobp26;Q8I8R6;131;3L;40213816;40214477;Classic;mclassic3;NA;aaegobp35;cquiobp20
AGAP012323;agamobp27;Q5TN65;134;3L;40218226;40218764;Classic;mclassic1;NA;aaegobp65;cquiobp16
AGAP012325;agamobp28;Q8I8R4;134;3L;40221011;40221620;Classic;mclassic3;NA;aaegobp12;cquiobp18
AGAP012322;agamobp63;Q6H900;135;3L;40217381;40217853;Classic;mclassic4;NA;aaegobp61;cquiobp17
AGAP012324;agamobp64;Q5TN67;142;3L;40219631;40220284;Classic;mclassic1;NA;aaegobp15;cquiobp15


Le but est de rechercher les éléments de
ort.csv
dans
BD.csv
. S'il retrouve le motif, il imprime les colonnes 8 et 9 en y ajoutant (by inference) pour chaque colonne (soit ici
Classic
(by inference) et
mclassic
(by inference)). S'il n'y a pas de correspondance écrire NA. Voici le code que j'ai réalisé pour le moment sans succès.... Je suis ouverte à toutes proposition de résolutions :

#!/bin/bash

cut -d ';' -f 10 albopictus.csv >1.txt
sed -e 's/ //g'  1.txt >ort.csv
rm 1.txt


for ligne in `cat ort.csv`
do
 a= grep -w $ligne BD.csv | cut -d';' -f 1 | head -1
 if [ -n "$a" ]
 then
         awk '{print $8, $9}' BD.csv
 else
  echo "NA" 
 fi 
    
done


Remarque : J'ai essayé dans un premier temps d'utiliser les dictionnaire du language python pour réaliser ce que je souhaitais, mais sans succès. Je me suis donc rabattue sur bash.

Vous en remerciant
A voir également:

1 réponse

mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
Modifié le 30 avril 2018 à 08:13
Bonjour,

Plusieurs remarques :
- dans ton script, la variable
a
est le résultat de la commande
grep -w $ligne BD.csv | cut -d';' -f 1 | head -1
donc cette commande devrait être entourée de backquotes ou par
$(...)
.
- que veux-tu dire par "by inference" ?
- est-ce que le motif à rechercher peut figurer dans n'importe quelle colonne ? D'après ton script on dirait qu'on ne le cherche qu'en colonne 1.
- est-il normal que certaines lignes de ort.csv aient le même contenu ?

Voici à mon avis la version corrigée de ton programme :

#!/bin/sh

for motif in $(sort ort.csv | uniq)
do 
    #echo "------ motif $motif ------"
    for line in $(grep "^$motif;" bd.csv)
    do
        if [ "$line" != "" ]
        then
            echo "$line" | cut -d";" -f8,9
        else
            echo "NA"
        fi
    done
done

exit 0


Bonne chance
0