Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Shop Recherche
1900 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

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

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1167697
alfredaube
Posté le 28-09-2009 à 21:27:53  profilanswer
 

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
mood
Publicité
Posté le 28-09-2009 à 21:27:53  profilanswer
 

n°1167768
twocats
Posté le 29-09-2009 à 00:55:53  profilanswer
 

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
n°1167910
alfredaube
Posté le 29-09-2009 à 16:11:36  profilanswer
 

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



Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

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

 

Sujets relatifs
[bash/perl] comparer un nom de dossier avec la date[résolu] Quelques statistiques
[DEBIAN] Apache2 , vhosts hs depuis la mise a jour...[RESOLU][résolu] mettre des [] dans les recettes de .procmailrc?
Fichier iso de RedHat(résolu) Lire et affiché une vidéo sur un serveur par ssh
[RESOLU] Firefox et Flash sour Ubuntu 9.04[RESOLU] Accéder à une partition raid 1 logiciel (ext3) sous Windows
[Résolu][IPTABLES] problème avec NAT[Résolu][SSH] Redirection SSH de VirtualHost
Plus de sujets relatifs à : [resolu] syntaxe pour comparer des chaines lors lecture d'un fichier


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR