Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/10/2011, 11h28   #1
Nouveau Membre du Club
 
Inscription : janvier 2008
Messages : 109
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 109
Points : 33
Points : 33
Par défaut Mettre mot entre guillemets en AWK ?

Bonjour;

Tout est dans l'intitulé.
Comment faire pour mettre entre guillemets chaques mots d'un fichier ?

Par exemple :
truc bidule machin

devient "truc" "bidule" "machin"


Merci de votre savoir et aide
Moostiq est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2011, 11h37   #2
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Salut,

"sed" me paraît plus adapté pour ce genre de tâche...

Code :
1
2
3
4
5
6
7
8
9
$ echo -e "truc bidule machin\nchose toto tata"
truc bidule machin
chose toto tata
 
$ echo -e "truc bidule machin\nchose toto tata" | sed 's/[^ ]*/"&"/g'
"truc" "bidule" "machin"
"chose" "toto" "tata"
 
$
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 18/10/2011, 11h47   #3
Nouveau Membre du Club
 
Inscription : janvier 2008
Messages : 109
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 109
Points : 33
Points : 33
Waouh !! Le "&" est assez incroyable

Mais le souci c'est qu'en fait, je n'ai pas des mots isolés truc puis bidule puis machin mais un string entier "truc bidule machin"....

Comment faire pour obtenir depuis "truc bidule machin" => "truc" "bidule" "machin" ?
Moostiq est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2011, 11h59   #4
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Dans quel contexte tu récupères ce "string" ?

Les solutions doivent être multiples, y compris avec "awk", mais le tout est de connaître le contexte afin d'adapter au mieux la solution...
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2011, 14h06   #5
Nouveau Membre du Club
 
Inscription : janvier 2008
Messages : 109
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 109
Points : 33
Points : 33
Je fais un "while read ligne do .... done < $FIC_ENTREE"
Moostiq est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2011, 14h13   #6
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Citation:
Envoyé par Moostiq Voir le message
Je fais un "while read ligne do .... done < $FIC_ENTREE"
Ok, et la $ligne se présente sous quel format ? Du moins où se situe le "string" recherché dans cette ligne ?
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 18/10/2011, 14h20   #7
Nouveau Membre du Club
 
Inscription : janvier 2008
Messages : 109
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 109
Points : 33
Points : 33
Eh bien, le string est la ligne lue depuis le FIC_ENTREE.
La "ligne-string" est définie comme celle là :
"truc bidule machin"
En fait il me faudrait du substring( ligne, qqchose, qqchose) avec un concat pour rajouter les guillemets sur chaque mot composant ma ligne.
Moostiq est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2011, 14h37   #8
Nouveau Membre du Club
 
Inscription : janvier 2008
Messages : 109
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 109
Points : 33
Points : 33
OK. C'est bon. Voilà ce que je cherchais en fait...
Code :
1
2
3
4
5
6
7
 
while read ligne do
                    Premiermot=`echo $ligne | cut -d\  -f1`;
                    Premiermot="\"${Premiermot}\"";
                    ...
                    ligne="${Premiermot} ${Deuxiememot} ... ${Derniermot}";
done < $FIC_ENTREE
Et pis c'est tout
Merci zipe31
Moostiq est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2011, 14h52   #9
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
J'ai rien pigé à ton truc

Ton script ne correspond en rien à ta demande initiale

On pourrait avoir un exemple concret d'un bout de ton fichier AVANT TRAITEMENT et APRÈS TRAITEMENT s'il te plaît, merci
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2011, 14h59   #10
Nouveau Membre du Club
 
Inscription : janvier 2008
Messages : 109
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 109
Points : 33
Points : 33
Arf!... Je suis dur à comprendre; ça tu ne me le fais pas dire ^^

En clair, j'avais un fichier d'extraction de données d'un bdd mySQL : FIC_ENTREE
Dans ce fichier je n'avais qu'une seule ligne (ce que je voulais! [un DISTINCT dans la requete mySQL executée]).
Au depart je pensais que cette ligne était composée de mots "détachés", mais ton echo ligne | sed ' ' ne me mettait que des guillemets en debut et fin de ligne...

D'ou le fait que je decoupe la ligne avec cut et que je rajoute des guillemets à chaque mot puis je les concatene tous pour obtenir une ligne avec tous les mots encadrés de guillemets.

Je suis plus clair ?
Moostiq est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2011, 15h59   #11
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Citation:
Envoyé par Moostiq Voir le message
Je suis plus clair ?
Oui et non

La syntaxe de sed donnée plus haut est sensée faire ce que tu veux. Par contre si elle ne le fait pas c'est qu'il y a anguille sous roche

D'où ma demande d'avoir un exemple concret et non des explications
Tu es sûr que tes mots sont bien séparés par un espace et non autre chose (j'entends par autre chose, tabulation, espaces répétés, caractères non-imprimables, etc.) ?

Mais bon si ton script suffit à ton bonheur, tu m'en vois ravi
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2011, 16h16   #12
Nouveau Membre du Club
 
Inscription : janvier 2008
Messages : 109
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 109
Points : 33
Points : 33
Bah je ne sais pas tres bien comment MySQL ecrit dans son "tee" (spool)...
Peut etre que c'etait des tabulations... qui sait ?...

Encore merci beaucoup pour ton aide

Mon script me convient parfaitement (clair net et precis )

Bonne fin de journée. Tcho
Moostiq est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h22.


 
 
 
 
Partenaires

Hébergement Web