Besoin de lire dans un fichier ligne par ligne separateur espace

Fermé
bong26 Messages postés 7 Date d'inscription lundi 22 mai 2017 Statut Membre Dernière intervention 1 octobre 2017 - 29 sept. 2017 à 16:47
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 2 oct. 2017 à 17:19
Bonjour,

Je ne comprends pas un truc j'ai besoin de faire un script en sh ou ksh pour lire un fichier sur plusieurs ligne

exemple:

cat toto.txt ( champs séparateur un espace entre chaque arguments)

compte1 121341 banque1
compte2 121eee banque2
compte3 777777 banque3
.......


but du jeux : je veux recuperer pour chaque ligne tous les champs pour mettre dans une commande

exemple de commande

commande compte1 excute 121341 action banque1 # ligne de commande avec les arguments recuperés

commande compte2 excute 121eee action banque2

etc...........


pour exprimer ce besoin j'ai fait soit une boucle for ou while et bien il me sort qu'une ligne sans me donner la globalité de mon fichier je ne comprends rien




##################### mon script ça donne ça ; mais ça ne fonctionne pas il ne récupere pas toutes les lignes je ne comprends pas




fichier="toto.txt"
oldIFS=$IFS # sauvegarde du separateur de champ
IFS=$'\n' # nouveau separateur de champ

for ligne in $(<$toto.txt)
do

APPLI=`echo "$line" |awk -F" " '{print $1}'`# recupere le 1er champ
NODE=`echo "$line" |awk -F" " '{print $2}'`
INSTANCE=`echo "$line" |awk -F" " '{print $3}'` # recupère le 2eme champs


# paramètre que je lance dans une commande pour chaque ligne
jndProjectCtl.sh --project $APPLI --instance $NODE:$INSTANCE status >> /app/jnd/cells/Cell_RLE-Production_std/SCRIPT_UTILE/JVM.TXT

done


A voir également:

3 réponses

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
29 sept. 2017 à 17:04
Salut,

Le fichier :
 $ cat fich.txt 
compte1 121341 banque1
compte2 121eee banque2
compte3 777777 banque3


Le script :
$ while read c1 c2 c3;do echo "Champ1 = ${c1} | Champ2 = ${c2} | Champ3 = ${c3}"; done < fich.txt 
Champ1 = compte1 | Champ2 = 121341 | Champ3 = banque1
Champ1 = compte2 | Champ2 = 121eee | Champ3 = banque2
Champ1 = compte3 | Champ2 = 777777 | Champ3 = banque3

0
bong26 Messages postés 7 Date d'inscription lundi 22 mai 2017 Statut Membre Dernière intervention 1 octobre 2017
30 sept. 2017 à 13:30
Merci dans un 1er temps pour ta réponse.
Mais dans ta solution tu lui formates un mot : champ1, champs2 etc....
Sur un fichier à plusieurs ligne ça ne va pas être gérable

moi ce que j'ai besoin, j'aimerais que la boucle gère mon fichier rentré sans modification

$ cat fich.txt
compte1 121341 banque1
compte2 121eee banque2
compte3 777777 banque3
............etc
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
30 sept. 2017 à 13:58
Ma réponse est un exemple que tu dois adapter à ton besoin.
N'ayant pas à disposition ton application "dProjectCtl.sh", je ne peux que te proposer une réponse que je pense adaptée !

$ cat fich.txt 
compte1 121341 banque1
compte2 121eee banque2
compte3 777777 banque3


$ while read APPLI NODE INSTANCE;do
echo "dProjectCtl.sh --project ${APPLI} --instance ${NODE}:${INSTANCE} status" >> JVM.txt
done < fich.txt


$ cat JVM.txt 
dProjectCtl.sh --project compte1 --instance 121341:banque1 status
dProjectCtl.sh --project compte2 --instance 121eee:banque2 status
dProjectCtl.sh --project compte3 --instance 777777:banque3 status


Si tu enlèves le "echo" de ma ligne de commande, ça devrait faire ce que tu veux, non ?
0
bong26 Messages postés 7 Date d'inscription lundi 22 mai 2017 Statut Membre Dernière intervention 1 octobre 2017 > zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021
Modifié le 1 oct. 2017 à 21:46
bonsoir zipe31
j'ai bien essayé ton petit test mais il ne veut rien savoir il me crée bien la 1er ligne de ma boucle mais le reste il me sort impossible à creer je ne comprends rien

mon fichier txt ressemble à ça j'ai bien un espace sur les champs

actfgf lr2pr324v actfgfServer01
wasa6 mfle157p wasa6Server01
wasa6 mfle158p wasa6Server02

voici
Project:actfgf/Node:lr2pr324v/Instance:actfgfServer01/: STARTED

le reste impossible à traiter dans la boucle

#########################################################

mon script est bien :

echo " rentrer un fichier: "

read PARAM

while read APPLI NODE INSTANCE

do


jndProjectCtl.sh --project ${APPLI} --instance ${NODE}:${INSTANCE} status >> JVM.TXT


done < $PARAM
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407 > bong26 Messages postés 7 Date d'inscription lundi 22 mai 2017 Statut Membre Dernière intervention 1 octobre 2017
1 oct. 2017 à 21:50
Peux-tu afficher le contenu de ton fichier (les 3-4 premières lignes) avec cette commande :
cat -A fichier.txt
?
0
bong26 Messages postés 7 Date d'inscription lundi 22 mai 2017 Statut Membre Dernière intervention 1 octobre 2017 > zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021
1 oct. 2017 à 22:03
cat -A data.txt

actfgf lr2pr324v actfgfServer01$
wasa6 mfle157p wasa6Server01$
wasa6 mfle158p wasa6Server02$
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407 > bong26 Messages postés 7 Date d'inscription lundi 22 mai 2017 Statut Membre Dernière intervention 1 octobre 2017
1 oct. 2017 à 22:06
Bizarre ;-(

Si tu appliques ma syntaxe (avec le
echo
) est-ce que tu as la même erreur ?
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
2 oct. 2017 à 14:10
hello
mettre un set -x au début du script our voir ce qu'il fait
0