extraitre une sous chaine esct ce possible ? - Shell/Batch - Programmation
Marsh Posté le 09-02-2004 à 14:23:10
Si la liste de noms de fichiers est dans 'liste.dat'
|
Marsh Posté le 09-02-2004 à 14:25:38
j'ai trouvé aussi la possibilité de la faire avec la commande awk
ça m'évite de passer par un fichier intermediaire
Marsh Posté le 09-02-2004 à 15:26:24
Tu peux effectivement aussi utiliser 'awk', une possibilité (ce n'est pas la seule) :
|
A toi de voir ce qui est le plus clair (pb maintenance).
Si tu dois traiter cette nouvelle liste par awk, alors il n'y a pas à hésiter fait tout avec un seul script 'awk'.
Marsh Posté le 09-02-2004 à 16:53:02
par contre est-il possible dans le awk de mettre des commandes linux mon script est le suivant
#!/bin/bash
for fichier in `ls | grep .sql`;
do
echo $fichier | awk '{split($1,tab,"-" );}
END{
mysql<<EOD_SQL
CREATE DATABASE IF NOT EXISTS tab[2];
show databases;
\q
EOD_SQL
mysql tab[2] < $fichier
#print tab[2];
}'
done
le seul problème est qu'il ne reconnait pas ce type de commande
comment procéder pour les executer ?
Marsh Posté le 09-02-2004 à 17:19:35
Tu ne peux pas inclure de commandes externes dans ton script awk.
Pour exécuter une telle commande, il faut passer par la fonction "system'.
Dans ton cas le plus simple est de rester au niveau du shell :
|
j'ai utilisé 'sed', mais tu peux remplacer par du 'awk' si tu veux :
|
Marsh Posté le 10-02-2004 à 04:47:13
Si c'est just pour prendre la partie derrière le premier « - », autant utilise cut : « cut -d- -f2 »
Marsh Posté le 10-02-2004 à 08:40:30
bon la première partie de ce que je souhaitais faire à fonctionner merci pour vos conseils ...
par contre je reste bloqué sur un problème voici le script que j'ai utilisé :
#!/bin/bash
ls -1 *.sql | awk -F- '{print $2 }' |
while read fichier;
do
mysql<<EOD_SQL
CREATE DATABASE IF NOT EXISTS $fichier;
\q
EOD_SQL
#echo $fichier
done
par contre ce je souhaiterais faire c'est inclure dans le même script uen autre variable contenant cette fois le nom du fichier lui même sans modification or par rapport au script ci -dessus la variable fichier est déjà modifiée ... donc si je repars avec un nouveau script du genre
for fichier2 in 'ls -1 *.sql';
do
fichier1=
mysql $fichier1 < $fichier2
done
je vais me retrouver de nouveau bloqué puisqu'en fait je voudrais à la fois utiliser le nom du fichier lui même et le fichier modifié comme dans le script ou je tromque le fichier ...
mais je ne sais comment m'y prendre
je ne sais pas si j'ai été très clair
Marsh Posté le 10-02-2004 à 09:37:19
|
Marsh Posté le 10-02-2004 à 10:17:52
merci bcp pour ton aide tout fonctionne bien et le script final est super court qui + est et rapide c'est vraiment bien de developper en bash même si le script n'est pas portable en tout cas il est efficace sur le serveur ...
par contre pourrais tu me conseiller des bouquins pour que je puisse me perfectionner dans la programmation en bash ?
Merci encore
Marsh Posté le 10-02-2004 à 11:10:17
Désolé, je n'ai aucun bouquin sur le sujet (formation sur le tas via les mans et la lecture de scripts existants).
Il y a pas mal de choix chez O'REILLY, les bouquins sont de qualité.
Il y a aussi le web comme source d'informations. Il y a de nombreux FAQ, HOWTO et tutoriaux.
Marsh Posté le 10-02-2004 à 11:12:53
ok je vais voir du côté O'REILLY puis poursuivre mes recherches sur internet
Marsh Posté le 09-02-2004 à 11:21:25
Bonjour ,
Je recupère dans un fichier bash des noms de fichiers et je souhaiterais extraire une sous chaine dans ces noms
par exemple :
01122-nomfichier-044774xxxx
ce que je voudrais c'est extraire "nomfichier"
Merci bcp