Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 big_smile


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 ... big_smile

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 wink


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 big_smile

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. big_smile

EDIT : si tu as [Résolu] ton problème, pense à changer le titre wink

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