#1 Le 14/05/2008, à 14:27
- 2l2n
[RESOLU] Traiter les lignes d'un fichier texte (script bash)
Bonjour,
J'aimerais créer un script qui lise chaque ligne d'un fichier texte pour s'en servir comme entrée dans une suite de commandes. Mon problème est qu'il y a des espaces dans chaque ligne (que je veux conserver) et je bloque sur le fait que mon script utilise chaque mot, et pas chaque ligne comme je le voudrais.
En clair, voici ce que donne mon script :
for I in monfichier.txt
do
echo ""$I" OK"
done
Le fichier txt :
mot1 mot2
mot3 mot4
Et le résultat :
mot1 OK
mot2 OK
mot3 OK
mot4 OK
Mais ce que je voudrais obtenir, c'est :
mot1 mot2 OK
mot3 mot4 OK
Dernière modification par 2l2n (Le 15/05/2008, à 08:42)
Hors ligne
#2 Le 14/05/2008, à 14:39
- wblitz
Re : [RESOLU] Traiter les lignes d'un fichier texte (script bash)
#!/bin/bash
fichier="$1"
while read ligne
do
echo "${ligne} OK"
done < ${fichier}
exit 0
à appeler comme suit:
./monscript.sh mon_fichier.txt
Dernière modification par wblitz (Le 14/05/2008, à 14:39)
"Un optimiste, c'est un homme qui plante deux glands et qui s'achète un hamac" - Jean de Lattre de Tassigny
Pensez à mettre [RÉSOLU] dans le sujet de vos posts une fois qu'ils le sont...
quelques docs
Hors ligne
#3 Le 14/05/2008, à 14:41
- iuchiban
Re : [RESOLU] Traiter les lignes d'un fichier texte (script bash)
Pas mieux
C'est depuis que Chuck Norris a laissé la vie sauve à un manchot que l'on dit que Linux est libre.
Chuck Norris n'a pas besoin d'éditer son premier message pour ajouter [Résolu]. Chuck Norris est toujours [Résolu], quoi qu'il arrive.
Hors ligne
#4 Le 14/05/2008, à 14:57
- 2l2n
Re : [RESOLU] Traiter les lignes d'un fichier texte (script bash)
WOW ça c'est rapide ...
J'ai l'info principale avec"while read", je vais un peu googler ça pour bien comprendre.
J'aime pas utiliser des trucs que je ne comprends pas.
Merci
Dernière modification par 2l2n (Le 14/05/2008, à 14:59)
Hors ligne
#5 Le 14/05/2008, à 15:15
- iuchiban
Re : [RESOLU] Traiter les lignes d'un fichier texte (script bash)
http://abs.traduc.org/abs-5.1-fr/index.html
Je trouve tout sur la programmation bash sur ce site
C'est depuis que Chuck Norris a laissé la vie sauve à un manchot que l'on dit que Linux est libre.
Chuck Norris n'a pas besoin d'éditer son premier message pour ajouter [Résolu]. Chuck Norris est toujours [Résolu], quoi qu'il arrive.
Hors ligne
#6 Le 14/05/2008, à 19:01
- Totor
Re : [RESOLU] Traiter les lignes d'un fichier texte (script bash)
pour faire du traitement ligne à ligne, awk est là pour ça (où encore sed)
#!/bin/bash
fichier="$1"
awk '{ print $0" OK" }' ${fichier}
tout dépend biensûr de ce que tu souhaites réellement faire
Dernière modification par Totor (Le 14/05/2008, à 19:02)
-- Lucid Lynx --
Hors ligne
#7 Le 14/05/2008, à 19:30
- yurek
Re : [RESOLU] Traiter les lignes d'un fichier texte (script bash)
fastoche :
#!/bin/bash
NB_ligne=`cat file|wc -l`
MARQUEUR="1"
while [ "$MARQUEUR" != "$NB_ligne" ]
do
echo "`cat file | head -n$MARQUEUR | tail -n1` OK"
MARQUEUR=$(($MARQUEUR+1))
echo $MARQUEUR
done
Mais bon moi je code avec des cat et des wc après je sais pas si y'a plus simple
Dernière modification par yurek (Le 14/05/2008, à 19:32)
http://doc.ubuntu-fr.org/installation/debutants
http://doc.ubuntu-fr.org/diagnostic
http://doc.ubuntu-fr.org/diagnostic_outils
http://doc.ubuntu-fr.org/reflexe_ubunteros
Hors ligne
#8 Le 15/05/2008, à 08:06
- 2l2n
Re : [RESOLU] Traiter les lignes d'un fichier texte (script bash)
Merci pour toutes ces propositions, mais celle de wblitz me parait être la plus simple ...
En plus, puisque j'avais déjà écrit mon script avec "for", il m'a suffit de le remplacer par "while read" et d'ajouter le fichier après le "done". Et ça marche d'enfer.
Mais c'est toujours bon de savoir que plusieurs chemins peuvent mener au même résultat.
Dernière modification par 2l2n (Le 15/05/2008, à 08:07)
Hors ligne
#9 Le 15/05/2008, à 08:29
- iuchiban
Re : [RESOLU] Traiter les lignes d'un fichier texte (script bash)
Comme tu peux le voir, awk fait en 1 ligne ce qui te prends 3-4 lignes avec un while read.
Mais le while read est plus "parlant"
tant que je lit une ligne
faire
<Cmd>
fait avec le fichier <Fichier.txt>
Mais awk est très puissant sur le traitement de colonnes par exemple.
EDIT : si tu as [Résolu] ton problème, pense à changer le titre
Dernière modification par iuchiban (Le 15/05/2008, à 08:29)
C'est depuis que Chuck Norris a laissé la vie sauve à un manchot que l'on dit que Linux est libre.
Chuck Norris n'a pas besoin d'éditer son premier message pour ajouter [Résolu]. Chuck Norris est toujours [Résolu], quoi qu'il arrive.
Hors ligne