Shell script touchy

Résolu
chris -  
KuKrApOk59 Messages postés 444 Statut Membre -
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 41342 Statut Modérateur 4 896
 
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
chris
 
simplement (encore) parfait, merci !
0
dubcek Messages postés 19021 Statut Contributeur 5 637
 
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 444 Statut Membre 84
 
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 41342 Statut Modérateur 4 896
 
Salut,

C'est pour fixer le séparateur en sortie (OutputFieldSeparator) qui par défaut est un espace.
0
dubcek Messages postés 19021 Statut Contributeur 5 637
 
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 444 Statut Membre 84
 
Merci pour ces éclaircissements !
0