Shell script touchy

Résolu/Fermé
chris - 26 mai 2010 à 09:33
KuKrApOk59 Messages postés 437 Date d'inscription jeudi 27 décembre 2007 Statut Membre Dernière intervention 13 septembre 2013 - 26 mai 2010 à 16:50
Bonjour,
J'ai un petit script à faire, voila ce que j'aimerai qu'il fasse:
j'ai un fichier source avec les données suivantes à l'interieur:
nom fich;var 1;var 2;var 3
fichier 1;titi;titi et tata;toto

et ainsi de suite pour chaque ligne (4 variables par lignes).
Au final, j'aimerai extraire pour chaque ligne, un fichier portant le nom de la 1ere variable, avec les autres variables insérées, par exemple:
fichier "nom fich" contenant les données:
ce fichier contient les données pour var 1 ainsi que pour var 2 mais aussi var 3.

Le texte sera toujours le meme pour chaque ligne, j'aurai ainsi pour le fichier "fichier 1":
ce fichier contient les données pour titi ainsi que pour titi et tata mais aussi toto.

Merci pour vous réponses à venir !
A voir également:

2 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
26 mai 2010 à 10:09
Salut,

$ ls
plop

$ cat plop
nom_fich;var 1;var 2;var 3
fichier_1;titi;titi et tata;toto

$ while IFS=';' read -r fich nom1 nom2 nom3; do touch "${fich}" && echo "Ce fichier contient les données pour ${nom1} ainsi que pour ${nom2} mais aussi ${nom3}." > "${fich}"; done < plop

$ ls
fichier_1  nom_fich  plop

$ cat fichier_1
Ce fichier contient les données pour titi ainsi que pour titi et tata mais aussi toto.

$ cat nom_fich
Ce fichier contient les données pour var 1 ainsi que pour var 2 mais aussi var 3.

$

;-))
0
simplement (encore) parfait, merci !
0
dubcek Messages postés 18748 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 26 septembre 2024 5 618
26 mai 2010 à 12:34
hello
$ cat a1
nom fich;var 1;var 2;var 3
fichier 1;titi;titi et tata;toto 
$ 
$ awk 'BEGIN{OFS=FS=";"};{print $2,$3,$4 > $1}' a1
$ 
$ head ???*
==> fichier 1 <==
titi;titi et tata;toto 

==> nom fich <==
var 1;var 2;var 3
$
0
KuKrApOk59 Messages postés 437 Date d'inscription jeudi 27 décembre 2007 Statut Membre Dernière intervention 13 septembre 2013 84
26 mai 2010 à 12:59
Je m'incruste, mais pour info,

A quoi sert le 'OFS=FS' ?
FS=";" est pour le délimiteur, OK, mais la premiere partie, je ne saisis pas

Merci :)
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
26 mai 2010 à 13:07
Salut,

C'est pour fixer le séparateur en sortie (OutputFieldSeparator) qui par défaut est un espace.
0
dubcek Messages postés 18748 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 26 septembre 2024 5 618
26 mai 2010 à 13:08
OFS est le délimiteur en sortie. En faisant print $2,$3 la virgule représente OFS, par défaut <espace>, ici ;
 $ echo "aaa;bbb" | awk -F";" '{print $1,$2}'
aaa bbb
$ 
$ echo "aaa;bbb" | awk 'BEGIN{FS=OFS=";"};{print $1,$2}'
aaa;bbb
$ 

NB: -F";" et {FS=";"} sont equivalents
0
KuKrApOk59 Messages postés 437 Date d'inscription jeudi 27 décembre 2007 Statut Membre Dernière intervention 13 septembre 2013 84
26 mai 2010 à 16:50
Merci pour ces éclaircissements !
0