Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1452 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  extraitre une sous chaine esct ce possible ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

extraitre une sous chaine esct ce possible ?

n°635732
casus
Posté le 09-02-2004 à 11:21:25  profilanswer
 

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

mood
Publicité
Posté le 09-02-2004 à 11:21:25  profilanswer
 

n°635995
aigles
Posté le 09-02-2004 à 14:23:10  profilanswer
 

Si la liste de noms de fichiers est dans 'liste.dat'


sed 's/[^-]*-\([^-]*\)-.*/\1/' liste.dat


---------------
Jean Pierre.
n°636004
casus
Posté le 09-02-2004 à 14:25:38  profilanswer
 

j'ai trouvé aussi la possibilité de la faire avec la commande awk
 
ça m'évite de passer par un fichier intermediaire

n°636084
aigles
Posté le 09-02-2004 à 15:26:24  profilanswer
 

Tu peux effectivement aussi utiliser 'awk', une possibilité (ce n'est pas la seule) :


awk '
{
  sub(/^[^-]+-/,"" );
  sub(/-.*$/,"" );
  filename=$0
} ' liste.dat


 
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'.


---------------
Jean Pierre.
n°636196
casus
Posté le 09-02-2004 à 16:53:02  profilanswer
 

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 ?  

n°636240
aigles
Posté le 09-02-2004 à 17:19:35  profilanswer
 

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 :
 


#!bin/bash
 
ls -1 *.sql | sed 's/[^-]*-\([^-]*\)-.*/\1/' | \
while read fichier
do
   mysql<<-EOD_SQL  
       CREATE DATABASE IF NOT EXISTS $fichier;  
       show databases;  
       \q  
   EOD_SQL
done
 


 
j'ai utilisé 'sed', mais tu peux remplacer par du 'awk' si tu veux :
 


ls -1 *.sql | awk -F- { print $2 }' |
while read fichier
 . . .  
done


 


---------------
Jean Pierre.
n°636872
matafan
Posté le 10-02-2004 à 04:47:13  profilanswer
 

Si c'est just pour prendre la partie derrière le premier « - », autant utilise cut : « cut -d- -f2 »

n°636893
casus
Posté le 10-02-2004 à 08:40:30  profilanswer
 

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 :(

n°636921
aigles
Posté le 10-02-2004 à 09:37:19  profilanswer
 


ls -1 *.sql | \
while read fichier
do
   fichier2=`echo $fichier | cut -d- -f2
   . . . .  
done


---------------
Jean Pierre.
n°636945
casus
Posté le 10-02-2004 à 10:17:52  profilanswer
 

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

mood
Publicité
Posté le 10-02-2004 à 10:17:52  profilanswer
 

n°637027
aigles
Posté le 10-02-2004 à 11:10:17  profilanswer
 

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.


---------------
Jean Pierre.
n°637037
casus
Posté le 10-02-2004 à 11:12:53  profilanswer
 

ok je vais voir du côté O'REILLY puis poursuivre mes recherches sur internet


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  extraitre une sous chaine esct ce possible ?

 

Sujets relatifs
problème conversion Chaine->hexa[C] Remplacer une partie d'une chaîne de caractères
gestion de données en Java, c'est possible ??[CSS] cet effet possible en css ???
Découper une chaine d'après sa longueur...remplacer un mot dans une chaine par un autre mot
[C] Rechercher un mot dans une chaîne de caractèresRécupérer la plus grande chaine ?
Recupération d'un numéro de Code a Barre dans une chaine EBCDIC[DELPHI] Création d'une chaine de connection à une BD ?
Plus de sujets relatifs à : extraitre une sous chaine esct ce possible ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR