[resolu] syntaxe pour comparer des chaines lors lecture d'un fichier

syntaxe pour comparer des chaines lors lecture d'un fichier [resolu] - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 28-09-2009 à 21:27:53    

Bonjour à tous,
 
Je suis nouveau en script shell et essaie de porter des scripts vbs en sh. Celui-ci consiste à lire un fichier et en écrire un autre selon le contenu lu.
Je n'arrive pas à comparer deux chaines !  :pt1cable:  
 
Si je mets des espaces dans la comparaison (avant et après égal), il n'entre pas dans la condition :
 
fichier=~/fichier.txt
taillefichier=$(wc -l <$fichier); i=0; k=1
while [ $i -lt $taillefichier ]; do
  i=$(($i+1))
  if [ "$(head -n $i $fichier | tail -n 1)" = "^" ]; then echo $i; fi  
done;
 
Si je ne mets pas des espaces dans la comparaison, il entre systématiquement dans la condition :
 
fichier=~/fichier.txt
taillefichier=$(wc -l <$fichier); i=0; k=1
while [ $i -lt $taillefichier ]; do
  i=$(($i+1))
  if [ "$(head -n $i $fichier | tail -n 1)"="^" ]; then echo $i; fi  
done;
 
Je ne comprend pas pourquoi ? Merci de votre aide.
 :love:


Message édité par alfredaube le 29-09-2009 à 16:12:34
Reply

Marsh Posté le 28-09-2009 à 21:27:53   

Reply

Marsh Posté le 29-09-2009 à 00:55:53    

Seule la première syntaxe est correcte (cf. man bash). C'est quoi le k=1 qui ne sert à rien. Dans ton test le "^" est censé représenter quoi ? Si c'est un caractère il faut sans doute le protéger. Ton code est très mal indenté, voir pas du tout, donc pénible à lire et à comprendre.

Citation :

fichier=~/fichier.txt
taillefichier=$(wc -l <$fichier)
i=0
k=1
 
while [[ $i -lt $taillefichier ]]
do
  i=$(($i+1))
  if [[ "$(head -n $i $fichier | tail -n 1)" = "\^" ]]
  then
    echo $i
  fi  
done


Donne quelque chose de plus clair (sans préjuger du résultat).
Une adresse utile :
http://abs.traduc.org/abs-fr/


---------------
La réponse est 42
Reply

Marsh Posté le 29-09-2009 à 16:11:36    

Merci pour le site, je n'ai pas encore été le voir mais l'ai enregistré en marque-pages.
J'ai eu la solution d'un autre forum sans trop savoir comment.
 
Voici la nouvelle version du script qui lit le fichier en mettant chaque ligne dans deux tableaux de variables et je parcours ensuite le tableau pour exécuter mes conditions sur le premier tableau (1er caractère de la ligne) et récupérer les données du second tableau :
 

Citation :

#!/bin/bash
 
fichier=~/fichier.txt
i=0
 
#Lecture du fichier pour mise en tableau
while read line
 do
   ((i++))
   prefixe[$i]=${line:0:1}
   ligne[$i]=${line:1}
done < $fichier
 
#Parcours du tableau
j=0
while [ $j -lt $i ]
 do
   ((j++))
   if [ "${prefixe[$j]}" = "^" ]
    then
      echo ${prefixe[$j]} "-" ${ligne[$j]}
  fi
done


Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed