Bash ne lit pas toutes les lignes
Résolu
irishupk
Messages postés
24
Date d'inscription
Statut
Membre
Dernière intervention
-
dubcek Messages postés 18789 Date d'inscription Statut Contributeur Dernière intervention -
dubcek Messages postés 18789 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
A voir également:
- Bash ne lit pas toutes les lignes
- Comment savoir si quelqu'un lit mes messages sur whatsapp - Accueil - Messagerie instantanée
- Mon pc ne lit pas ma clé usb - Guide
- Afficher toutes les lignes masquées excel ✓ - Forum Excel
- Re-afficher des colonnes masquées ✓ - Forum Excel
- Filtre excel ne fonctionne pas sur toutes les lignes ✓ - Forum Excel
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 variable
De même une boucle
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… readserait plus adaptée ici (sous réserve d'en savoir un peu plus)
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 ...
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 ...
En faite, je possède deux fichiers :
christyi.csv
et
BD.csv qui me sert de base de données (ici une infime partie)
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é
Attend le passage d'un spécialiste "awk" comme "dubcek"…
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 ! :)