Bash ne lit pas toutes les lignes

Résolu
irishupk Messages postés 27 Statut Membre -  
dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   -
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

  1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    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
    1. irishupk Messages postés 27 Statut Membre 1
       
      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
    2. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501 > irishupk Messages postés 27 Statut Membre
       
      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
    3. irishupk Messages postés 27 Statut Membre 1
       
      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
    4. irishupk Messages postés 27 Statut Membre 1
       
      Je vous remercie du temps que vous m'avez consacré ! J'ai réussit à le faire marché entièrement et parfaitement Merci !
      0
    5. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501 > irishupk Messages postés 27 Statut Membre
       
      Happy for you, mais poster la solution eut été encore mieux ;-\
      0
  2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    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