Bash ne lit pas toutes les lignes

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 27 avril 2018 à 11:12
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 - 28 avril 2018 à 11:06
Bonjour,

J'ai écris un script qui exécute des actions ligne par ligne d'un fichier. Il fonctionne bien cependant, quand il s'agit d'un fichier contenant 70 ligne il marche mais quand le fichier fait une centaine de ligne il ne fonctionne plus.... Une solution pour régler le problèmes ? Cordialement

old_IFS=$IFS # sauvegarde du séparateur de champ
IFS=$'\n' # nouveau séparateur de champ, le caractère fin de ligne

for line in $(cat $1.csv)
do
 #echo "$line"
 #res=`grep "$line" $1.csv | awk -F';' '{print $10}'`
 #echo "$res"
 #TOTO=`grep "ligne" $1.csv | awk -F';' '{print $10}'`
 an=$(grep "$line" $1.csv | awk -F';' '{print $10}')
 #echo "Le résultat est $an"
 
 if [ $an != "NA" ]
 then
        o=$(grep "$an" BD.csv | awk -F';' '{print $8 " (by inference);" $9 " (by inference)"}')
        #echo "$o"
        if test -n "$o"
  then
   echo "$o"
  else
   ae=$(grep "$line" $1.csv | awk -F';' '{print $11}')
   #echo "2emm $ae"
   if [ $ae != "NA" ]
   then
    i=$(grep "$ae" BD.csv | awk -F';' '{print $8 " (by inference);" $9 " (by inference)"}')
    #echo "$i"
    if test -n "$i"
    then
     echo "$i"
    else
     cu=$(grep "$line" $1.csv | awk -F';' '{print $12}')
     #echo "3emmmme $cu"
     if [ $cu != "NA" ]
     then
      c=$(grep "$cu" BD.csv | awk -F';' '{print $8 " (by inference);" $9 " (by inference)"}')
      #echo "$c"
      if test -n "$c"
      then
       echo "$c"
      else
       echo "NA;NA"
      fi
     fi
    fi
   else
    w=$(grep "$line" $1.csv | awk -F';' '{print $12}')
    #echo "4emmmme $w"
    if [ $w != "NA" ]
    then
     z=$(grep "$w" BD.csv | awk -F';' '{print $8 " (by inference);" $9 " (by inference)"}')
     #echo "$z"
     if test -n "$z"
     then
      echo "$z"
     else
       echo "NA;NA"
     fi
    fi
   fi
  fi
    else
  n=$(grep "$line" $1.csv | awk -F';' '{print $11}')
  #echo "2emm $n"
  if [ $n != "NA" ]
  then
   h=$(grep "$n" BD.csv | awk -F';' '{print $8 " (by inference);" $9 " (by inference)"}')
   #echo "$h"
   if test -n "$h"
   then
    echo "$h"
   else
    l=$(grep "$line" $1.csv | awk -F';' '{print $12}')
    #echo "3emmmme $cu"
    if [ $l != "NA" ]
    then
     m=$(grep "$l" BD.csv | awk -F';' '{print $8 " (by inference);" $9 " (by inference)"}')
     #echo "$m"
     if test -n "$m"
     then
      echo "$m"
     else
      echo "NA;NA"
     fi
    fi
   fi
  else
   u=$(grep "$line" $1.csv | awk -F';' '{print $12}')
   #echo "4emmmme $u"
   if [ $u != "NA" ]
   then
    v=$(grep "$u" BD.csv | awk -F';' '{print $8 " (by inference);" $9 " (by inference)"}')
    #echo "$v"
    if test -n "$v"
    then
     echo "$v"
    else
      echo "NA;NA"
    fi
   fi
  fi
 fi
done

IFS=$old_IFS # rétablissement du séparateur de champ par défaut



j'ai également essayé avec while et for line in $(<$fichier) mais même problème

2 réponses

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
27 avril 2018 à 11:23
Salut,

Si tu nous expliquais ce qu'est censé faire ton script, à défaut de nous fournir le fichier d'entrée, peut-être serions-nous à même de t'aider ;-\

À partir du moment où tu veux lire un fichier ligne par ligne, inutile de modifier la variable
IFS
(sauf emploi d'une boucle
for
, ce qui me paraît inadapté à ton cas) ;-(

De même une boucle
while… read
serait plus adaptée ici (sous réserve d'en savoir un peu plus)

0
irishupk Messages postés 25 Date d'inscription vendredi 13 avril 2018 Statut Membre Dernière intervention 29 juin 2020 1
27 avril 2018 à 12:19
Bonjour, c'est un peu long à expliquer ^^

En faite, je possède deux fichiers :

christyi.csv

ACHR000064;NA;A0A182JNI0_9DIPT;149;KB697282;6651;7200;NA;NA;AGAP002905;AAEL000035;CPIJ016965
ACHR000363;NA;A0A182JPC9_9DIPT;157;KB701792;47868;48472;NA;NA;AGAP001409;AAEL008013;CPIJ007617
ACHR001616;NA;A0A182JSY4_9DIPT;301;KB702903;18940;23531;NA;NA;AGAP012320;AAEL002606;CPIJ012719
ACHR001617;NA;A0A182JSY5_9DIPT;332;KB702903;26479;30026;NA;NA;AGAP012324;AAEL002598;CPIJ012714
ACHR002490;NA;A0A182JVF8_9DIPT;137;KB701682;3759;4336;NA;NA;AGAP001189;AAEL007603;CPIJ014525
ACHR002731;NA;A0A182JW49_9DIPT;201;KB699482;397;1075;NA;NA;AGAP007289;AAEL011494;CPIJ002108
ACHR002999;NA;A0A182JWW8_9DIPT;171;KB703138;22446;23100;NA;NA;AGAP002556;AAEL015313;CPIJ009586
ACHR003734;NA;A0A182JZ02_9DIPT;272;KB677746;562;1380;NA;NA;AGAP012867;AAEL011416;CPIJ010367
ACHR003993;NA;A0A182JZR1_9DIPT;134;KB675824;192;746;NA;NA;AGAP012714;AAEL000051;CPIJ016949
ACHR004105;NA;A0A182K023_9DIPT;155;KB674114;1451;2078;NA;NA;AGAP012319;AAEL002626;CPIJ012720
ACHR004106;NA;A0A182K024_9DIPT;131;KB674114;4173;4640;NA;NA;AGAP012318;AAEL002596;CPIJ012721
ACHR004138;NA;A0A182K056_9DIPT;345;KB678369;10926;12939;NA;NA;AGAP007281;AAEL011487;CPIJ002111
ACHR004139;NA;A0A182K057_9DIPT;213;KB678369;13241;14100;NA;NA;AGAP007283;NA;NA
ACHR004267;NA;A0A182K0I5_9DIPT;204;KB674302;10662;11356;NA;NA;AGAP011368;AAEL006103;CPIJ004630
ACHR004268;NA;A0A182K0I6_9DIPT;1472;KB674302;13219;20880;NA;NA;AGAP011367;AAEL006109;CPIJ004634
ACHR005775;NA;A0A182K4U0_9DIPT;551;KB692634;5481;10742;NA;NA;AGAP009629;NA;NA
ACHR006733;NA;A0A182K7J8_9DIPT;361;KB697097;663;1745;NA;NA;AGAP010648;AAEL006387;CPIJ009038
ACHR006947;NA;A0A182K862_9DIPT;275;KB697098;1352;2179;NA;NA;AGAP005182;NA;NA
ACHR007406;NA;A0A182K9G9_9DIPT;112;KB697690;3672;4082;NA;NA;AGAP001556;AAEL006176;CPIJ001365
ACHR008260;NA;A0A182KBX3_9DIPT;136;KB699491;6197;6749;NA;NA;AGAP008398;AAEL001826;CPIJ001876
ACHR008567;NA;A0A182KCT0_9DIPT;323;KB700086;5030;6001;NA;NA;AGAP002191;NA;NA
ACHR008568;NA;A0A182KCT1_9DIPT;284;KB700086;6331;7185;NA;NA;AGAP002190;AAEL009597;CPIJ015732
ACHR008755;NA;A0A182KDB8_9DIPT;125;KB700343;479;919;NA;NA;AGAP006081;NA;NA
ACHR008756;NA;A0A182KDB9_9DIPT;653;KB700343;1743;6990;NA;NA;AGAP006080;AAEL000124;CPIJ008868
ACHR009068;NA;A0A182KE80_9DIPT;460;KB701251;404;6493;NA;NA;AGAP007286;AAEL015567;CPIJ002105
ACHR009069;NA;A0A182KE81_9DIPT;194;KB701251;2574;3339;NA;NA;AGAP007287;AAEL011499;NA
ACHR009369;NA;A0A182KF31_9DIPT;150;KB702202;1763;2526;NA;NA;AGAP010489;AAEL006454;CPIJ008793
ACHR009602;NA;A0A182KFR4_9DIPT;154;KB702673;1245;1938;NA;NA;AGAP003530;AAEL000071;CPIJ016952
ACHR009823;NA;A0A182KGD5_9DIPT;162;KB703262;4766;5254;NA;NA;AGAP002188;NA;NA
ACHR010163;NA;A0A182KHC5_9DIPT;331;KB678756;4862;5857;NA;NA;AGAP009402;NA;CPIJ008158
ACHR010242;NA;A0A182KHK4_9DIPT;163;KB686196;743;1234;NA;NA;AGAP000278;AAEL005772;CPIJ017326
ACHR010243;NA;A0A182KHK5_9DIPT;188;KB686016;1265;1831;NA;NA;AGAP002189;NA;NA
ACHR010256;NA;A0A182KHL8_9DIPT;153;KB689551;194;828;NA;NA;AGAP006368;NA;CPIJ007337


et
BD.csv qui me sert de base de données (ici une infime partie)
 
AGAP001189;agamobp10;F7IW19;131;2R;1034139;1169444;Classic;mclassic6;NA;aaegobp10;cquiobp24
AGAP002025;agamobp11;Q8I8Q9;192;2R;14069095;14069749;Classic;mclassic9;NA;NA;NA
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
AAEL001826;aaegobp8;Q17K30;133;1.43;1541221;1541846;Classic;mclassic5;agamobp21;NA;cquiobp23
AAEL002596;aaegobp9;Q17HN8;132;1.61;1448858;1449413;Classic;mclassic3;agamobp23;NA;cquiobp22
AAEL007603;aaegobp10;Q8WPC2;140;1.266;1269968;1270519;Classic;mclassic6;agamobp10;NA;cquiobp24
AAEL002587;aaegobp11;Q17HN5;137;1.61;1518773;1519546;Classic;mclassic3;agamobp25;NA;cquiobp19
AAEL002617;aaegobp12;Q17HN4;132;1.61;1525746;1526203;Classic;mclassic3;agamobp28;NA;cquiobp18
AAEL002591;aaegobp13;Q17HN3;132;1.61;1541151;1541767;Classic;mclassic4;NA;NA;NA
AAEL002605;aaegobp14;Q17HN2;133;1.61;1560540;1560999;Classic;mclassic4;NA;NA;NA
AAEL002598;aaegobp15;Q17HM9;136;1.61;1605563;1618454;Classic;mclassic1;agamobp64;NA;cquiobp15
AAEL004339;aaegobp17;Q17D39;138;1.115;975305;1055633;Classic;mclassic7;NA;NA;cquiobp53
AAEL004342;aaegobp18;Q17D38;140;1.115;1056506;1057069;Classic;mclassic9;agamobp14;NA;NA
AAEL004343;aaegobp19;Q17D37;145;1.115;1059658;1060207;Classic;mclassic9;NA;NA;cquiobp51
AAEL002606;aaegobp35;Q17HN6;131;1.61;1497852;1498861;Classic;mclassic3;agamobp26;NA;cquiobp20
AAEL015554;aaegobp61;Q1DGP0;132;1.3221;5993;6448;Classic;mclassic4;agamobp63;NA;cquiobp17
AAEL002618;aaegobp65;Q17HN0;98;1.61;1577860;1578251;Classic;mclassic1;agamobp27;NA;cquiobp16
AAEL007604;aaegobp76;Q171L5;134;1.266;1288889;1290609;Classic;mclassic6;NA;NA;NA
AAEL002626;aaegobp77;Q17HN7;138;1.61;1455363;1456069;Classic;mclassic2;agamobp24;NA;cquiobp21
AAEL011730;aaegobp81;Q16P85;151;1.606;650035;650560;Classic;mclassic8;agamobp22;NA;cquiobp44
CPIJ012714;cquiobp15;B0X0F8;141;3.424;103588;109982;Classic;mclassic1;agamobp64;aaegobp15;NA
CPIJ012715;cquiobp16;B0X0F9;134;3.424;112183;112979;Classic;mclassic1;agamobp27;aaegobp65;NA
CPIJ012716;cquiobp17;B0X0G0;132;3.424;113896;114578;Classic;mclassic4;agamobp63;aaegobp61;NA
CPIJ012717;cquiobp18;B0X0G1;132;3.424;122946;123411;Classic;mclassic3;agamobp28;aaegobp12;NA
CPIJ012718;cquiobp19;B0X0G2;139;3.424;131078;131864;Classic;mclassic3;agamobp25;aaegobp11;NA
CPIJ012719;cquiobp20;B0X0G3;131;3.424;135879;136509;Classic;mclassic3;agamobp26;aaegobp35;NA
CPIJ012720;cquiobp21;B0X0G4;139;3.424;171439;171968;Classic;mclassic2;agamobp24;aaegobp77;NA
CPIJ012721;cquiobp22;B0X0G5;131;3.424;172603;173060;Classic;mclassic3;agamobp23;aaegobp9;NA
CPIJ001876;cquiobp23 ;B0W4L9;136;3.26;255589;259525;Classic;mclassic5;agamobp21;aaegobp8;NA
CPIJ014525;cquiobp24;B0X5A6;137;3.561;24869;25524;Classic;mclassic6;agamobp10;aaegobp10;NA
CPIJ009937;cquiobp44;B0WSW7;147;3.265;418539;421106;Classic;mclassic8;agamobp22;aaegobp81;NA
CPIJ010782;cquiobp46;B0WVK1;150;3.315;176953;177463;Classic;mclassic9;NA;NA;NA
CPIJ010787;cquiobp51;B0WVK6;144;3.315;189941;190471;Classic;mclassic9;NA;aaegobp19;NA
CPIJ010788;cquiobp52;B0WVK7;143;3.315;190549;191091;Classic;mclassic9;NA;NA;NA
CPIJ010789;cquiobp53;B0WVK8;145;3.315;191345;193026;Classic;mclassic7;NA;aaegobp17;NA
CPIJ016343;cquiobp63;B0X9J6;181;3.758;25841;28252;Classic;mclassic9;agamobp14;NA;NA
AGAP007289;agamobp46;Q706F3;202;2L;45014419;45015087;PlusC;mplus2;NA;aaegobp48;cquiobp108
AGAP007287;agamobp47;Q7PF80;228;2L;45011203;45012023;PlusC;mplus1;NA;NA;NA
AGAP007286;agamobp48;Q7YW67;200;2L;45008928;45009814;PlusC;mplus1;NA;aaegobp42;cquiobp106
AGAP006075;agamobp49;Q7YW66;179;2L;26103215;26103894;PlusC;mplus9;NA;aaegobp73;cquiobp112
AGAP006076;agamobp50;Q7YW65;166;2L;26104148;26104931;PlusC;mplus9;NA;NA;NA
AGAP006077;agamobp51;A7UU11;203;2L;26129377;26130091;PlusC;mplus9;NA;NA;NA


Pour chaque ligne de christyi.csv, le but est de rechercher le contenu de la colonne 10 dans BD.csv. Deux cas de figure :
- Si la colonne 10 possède un nom : il faut rechercher ce nom dans BD.csv. Si il y a une correspondance, il doit afficher il doit afficher les colonne 8 et 9 de la ligne où il y a eu correspondance de BD.csv. Sinon si il n'a pas retrouver le nom dans BD.csv, il doit rechercher le nom de la colonne 11 dans dans BD.csv. Si la colonne 11 possède un nom, il faut rechercher ce nom dans BD.csv. Si il y a une correspondance, il doit afficher les colonne 8 et 9 de la ligne où il y a eu correspondance de BD.csv. Sinon si il n'a pas retrouver le nom dans BD.csv, il doit rechercher le nom de la colonne 12 dans dans BD.csv. Si la colonne 12 possède un nom, il faut rechercher ce nom dans BD.csv. Si il y a une correspondance, il doit afficher les colonne 8 et 9 de la ligne où il y a eu correspondance de BD.csv. Sinon si il n'a pas retrouver le nom dans BD.csv, il doit mettre NA;NA.

- Si la colonne possède NA : il doit rechercher le nom de la colonne 11 dans dans BD.csv. Si la colonne 11 possède un nom, il faut rechercher ce nom dans BD.csv. Si il y a une correspondance, il doit afficher les colonne 8 et 9 de la ligne où il y a eu correspondance de BD.csv. Sinon si il n'a pas retrouver le nom dans BD.csv, il doit rechercher le nom de la colonne 12 dans dans BD.csv. Si la colonne 12 possède un nom, il faut rechercher ce nom dans BD.csv. Si il y a une correspondance, il doit afficher les colonne 8 et 9 de la ligne où il y a eu correspondance de BD.csv. Sinon si il n'a pas retrouver le nom dans BD.csv, il doit mettre NA;NA.

Désoler pour ce gros pavé
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407 > irishupk Messages postés 25 Date d'inscription vendredi 13 avril 2018 Statut Membre Dernière intervention 29 juin 2020
27 avril 2018 à 13:49
Merci pour ce complément d'info. Par contre t'aurais pu continuer sur developpez.net, où un bon début de script t'avait été fourni à base de "awk", langage plus approprié à ton problème que purement en shell bash.

Attend le passage d'un spécialiste "awk" comme "dubcek"…
0
irishupk Messages postés 25 Date d'inscription vendredi 13 avril 2018 Statut Membre Dernière intervention 29 juin 2020 1
27 avril 2018 à 14:07
Le problème de l'aide donnée sur developper et que la ligne donnée disait, pour un même nom trouvé et non trouvé et donc affichait les colonne 8 et 9 et NA;NA pour un même nom...

Là, j'ai cerné le problème, reste à le résoudre. Je crois qu'il n'arrive pas à faire la condition si il le nom n'a pas de correspondance dans BD.csv.

Merci de m'avoir donné un peu de votre temps ! :)
0
irishupk Messages postés 25 Date d'inscription vendredi 13 avril 2018 Statut Membre Dernière intervention 29 juin 2020 1
27 avril 2018 à 16:41
Je vous remercie du temps que vous m'avez consacré ! J'ai réussit à le faire marché entièrement et parfaitement Merci !
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407 > irishupk Messages postés 25 Date d'inscription vendredi 13 avril 2018 Statut Membre Dernière intervention 29 juin 2020
27 avril 2018 à 16:42
Happy for you, mais poster la solution eut été encore mieux ;-\
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
28 avril 2018 à 11:06
hello
Sinon si il n'a pas retrouver le nom dans BD.csv, il doit rechercher le nom de la colonne 11 dans dans BD.csv. Si la colonne 11 possède un nom, il faut rechercher ce nom dans BD.csv. Si il y a une correspondance, il doit afficher les colonne 8 et 9 de la ligne où il y a eu correspondance de BD.csv.

j'ai beau secouer, ce n'est pas clair ...
0