Hi ALL!
J'ai une colonne dans un fichier a.text. Cette colonne doit être divisé en 4 et envoyé dans 4 variable différentes.
L'idée est que je lis ce fichier avec une boucle, mais j'envoie les résultats dans 4 variables diferentes. Le script sera en kornshell. Pouvez-vous m'aider la dessus svp…
# c'est simple...
Posté par myou (site web personnel) . Évalué à 3.
man read,
ou
man awk
ou man sed
et http://abs.traduc.org/abs-fr/index.html
avec cela tu devrais réussir
Ensuite en fonction du formatage de tes variables, des solutions sont a privilégier….
Tu peux poster ici ce que tu as fait, il y aura toujours qqun pour t'aider a résoudre les problèmes que tu rencontres…; par contre, personne ne fera le script à ta place ;o)
[^] # Re: c'est simple...
Posté par michelle madd . Évalué à 1.
Simple pour toi, pas pour moi
voici l'idée
comm_qui_crache | grep blabla | awk '{print $1}'| awk -F ":" '{print $2}' > fichier/a.tex
de ce fichier/a.tex je souhaite faire une boucle assez simple (complexe pour moi) qui redirigera
le contenu de notre colonne sur 4 variables
for i in
cat fichier/a.tex
do
commande $i
done
for j in
cat fichier/a.tex
do
commande $j
done
for k in
cat fichier/a.tex
do
commande $k
done
…
mais c'est le plus simple pour moi.
[^] # Re: c'est simple...
Posté par fearan . Évalué à 5.
sans exemple de ce que contient la colonne difficile de répondre.
Sinon j'ai une autre question, pourquoi le korn shell? et quelle version ? le ksh93 ? un plus récent ?
Généralement, bash est plus communément connu.
ensuite j'aurais tendance à dire que
risque de te péter un jour à la gueule pour cause de ligne trop longue.
je te conseillerai plutôt un
ou encore mieux, pour éviter un uuoc
ensuite à supposer que ta colonne soit un certain nombre de valeurs séparées par un ';' tu peux utiliser la variable IFS
Enfin si ton shell gère les $() ce qui devrait être le cas, il est très préférable de les utiliser à la places des backquotes (alt gr 7), c'est plus lisible, et tu peux les imbriquer sans jouer avec les \
Ah et tant qu'a faire grep blablabla| awk, peut très probablement se remplacer par un seul awk :
Il ne faut pas décorner les boeufs avant d'avoir semé le vent
[^] # Re: c'est simple...
Posté par michelle madd . Évalué à 1.
…
ben voilà. c'est simple pour toi! Merci vieux !
par contre pour le coup du awk me plait bien.
c'est du ksh parce que c'est un vieux redhat (qui n'a que ce shell d'autorisé) en cluster (4 nodes) qui n'a pas de load balancer et donc qui met a disposition plus de 100 services clusters. Donc les services
cat fichier/a.tex | echo while read -r a b c d;
do
commandeCluster $a node1;
commandeCluster $b node2;
commandeCluster $c node3;
commandeCluster $d node4;
done
mais ça n'envoie pas les ressources en parallèle. Après sur le serveur on a un shell python, mais j'y connais rien au python.
[^] # Re: c'est simple...
Posté par fearan . Évalué à 4.
c'est difficile de répondre au besoin sans savoir le besoin, typiquement j'ai cru comprendre via ton commentaire que tu souhaiterais lancer les commandes en parallèle,
donc si j'ai bien suivi tu as 4 machine sur lesquels envoyer les commandes avec 1 paramètre par ligne, et il faut découper le fichier de façon a exécuter les commandes sur les machines
là dessus un solution basique consisterai a couper le ficher en 4
typiquement
et lancer tes boule en non bloquant
Par contre si tes commandes ont un temps de traitement différent, tu peux souhaiter vouloir équilibrer le tout pour pas que le node1 prenne 15 heure alors que le node3 en utilise que 2. Là ça demande un peu plus technique et si c'est faisable à la main en shell, ça risque d'être marrant à maintenir pour le suivant
par contre tu as un outils gnu pour ça : parallel
par exemple :
cat fichier/a.tex | parallel --sshlogin node1,node2,node3,node4 commande {}
si tu n'as pas parallel, il existe aussi map
Il ne faut pas décorner les boeufs avant d'avoir semé le vent
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.