Lire ligne par ligne trois colonne differente d'un fichier csv

Fermé
eightG4 Messages postés 5 Date d'inscription mercredi 28 octobre 2009 Statut Membre Dernière intervention 2 février 2017 - 2 févr. 2017 à 12:01
dubcek Messages postés 18744 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 4 septembre 2024 - 3 févr. 2017 à 10:00
Bonjour,

J'ai beau avoir cherché je ne trouve pas réponses à ma problématique. Je ne fais plus trop de scripting en shell, j'ai vraiment perdu la main.

Voilà ce que j'essai de faire.

A partir d'un fichier .csv j'essai de:

lire la ligne 1 de la colonne 9 var1=$(cat backup_f.csv | awk -F, '{print $9}')
lire la ligne 1 de la colonne 10 var2=$(cat backup_f.csv | awk -F, '{print $10}')
lire la ligne 1 de la colonne 13 var3=$(cat backup_f.csv | awk -F, '{print $13}')

et injecter les variables var1, var2, var3 de la ligne 1 dans la commande:

cmd --domain=var1 --group=var2 --name=var3

puis injecter de la même manière les résultat des variables var1, var2, var3 de la ligne 2 dans la même commande, ainsi de suite jusqu'à la fin du fichier.

J'ai beau avoir tenté plusieurs approches, je bloc.
A voir également:

2 réponses

dubcek Messages postés 18744 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 4 septembre 2024 5 617
2 févr. 2017 à 12:27
hello
$ awk -F "," '{print "cmd --domain=" $9 " --group=" $10 " --name=" $13}' backup_f.csv

ajouter | bash pour exécuter les cmd
2
eightG4 Messages postés 5 Date d'inscription mercredi 28 octobre 2009 Statut Membre Dernière intervention 2 février 2017
Modifié par eightG4 le 2/02/2017 à 13:56
Merci pour ta réponse, c'est super sympa.

Le | bash tu le places ou je n'ai jamais eu à faire à ce genre de methode pour exécuter les commandes dans un script.

Y'a aucun moyen de l'intégré à une boucle ?
0
dubcek Messages postés 18744 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 4 septembre 2024 5 617
Modifié par dubcek le 2/02/2017 à 14:26
comme ca
awk -F "," '{print "cmd --domain=" $9 " --group=" $10 " --name=" $13}' backup_f.csv | bash

avec boucle
$ while read v1 v2 v3; do cmd --domain=$v1 --group=$v2 --name=$v3; done < <(awk -F "," '{print  $9, $10, $13}' backup_f.csv)
0
eightG4 Messages postés 5 Date d'inscription mercredi 28 octobre 2009 Statut Membre Dernière intervention 2 février 2017
Modifié par eightG4 le 2/02/2017 à 14:56
Je comprends parfaitement la structure maintenant.

Merci d'avoir dissipé mes doutes.

PS: J'ai une question pourquoi le double chevron près de done ?

C'est ni un "<" ni un "<<" mais un "< <", je ne connaissais pas cette notation avec espace.

A bientôt ;)
0
UnGnU Messages postés 1158 Date d'inscription lundi 2 mai 2016 Statut Contributeur Dernière intervention 22 décembre 2020 157 > eightG4 Messages postés 5 Date d'inscription mercredi 28 octobre 2009 Statut Membre Dernière intervention 2 février 2017
2 févr. 2017 à 15:31
Re-

C'est la syntaxe pour une substitution de processus
0
dubcek Messages postés 18744 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 4 septembre 2024 5 617 > eightG4 Messages postés 5 Date d'inscription mercredi 28 octobre 2009 Statut Membre Dernière intervention 2 février 2017
3 févr. 2017 à 10:00
la notation
cmd1 < <(cmd2)

equivaut à faire
mkfifo /tmp/fifo
cmd2 > /tmp/fifo &
cmd1 < /tmp/fifo
0
UnGnU Messages postés 1158 Date d'inscription lundi 2 mai 2016 Statut Contributeur Dernière intervention 22 décembre 2020 157
2 févr. 2017 à 12:03
0