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 -
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
j'ai également essayé avec while et for line in $(<$fichier) mais même problème
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
-
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 variableIFS
(sauf emploi d'une bouclefor
, ce qui me paraît inadapté à ton cas) ;-(
De même une bouclewhile… read
serait plus adaptée ici (sous réserve d'en savoir un peu plus)
-
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é -
-
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 ! :) -
-
-
-
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 ...