Awk : faire une action sur tous les champs
Résolu/Fermé
dna.factory
Messages postés
24947
Date d'inscription
mercredi 18 avril 2007
Statut
Modérateur
Dernière intervention
23 avril 2024
-
9 août 2012 à 16:55
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 10 août 2012 à 14:19
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 10 août 2012 à 14:19
A voir également:
- Awk : faire une action sur tous les champs
- Ps awk ✓ - Forum Debian
- Awk windows - Forum Windows
- Awk supprimer ligne contenant chaîne ✓ - Forum Shell
- Awk date - Forum Shell
- Awk separateur ✓ - Forum Shell
7 réponses
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 407
9 août 2012 à 17:27
9 août 2012 à 17:27
Salut,
Avec sed :
Avec sed :
sed "s/|/','/g;s/^\|$/'/g" fichier
Utilisateur anonyme
Modifié par qqchquicommenceparQ le 9/08/2012 à 17:19
Modifié par qqchquicommenceparQ le 9/08/2012 à 17:19
salut,
awk -vguill="'" -F"|" '{for(i=1;i<=NF;i++)printf(guill"%s"guill(i<NF?",":"\n"),$i)}'
dna.factory
Messages postés
24947
Date d'inscription
mercredi 18 avril 2007
Statut
Modérateur
Dernière intervention
23 avril 2024
1 609
10 août 2012 à 09:32
10 août 2012 à 09:32
je comprends la méthode, mais apparement, le printf gère les variables awk différement du print car j'ai un
"awk: calling undefined function guill"
"awk: calling undefined function guill"
dna.factory
Messages postés
24947
Date d'inscription
mercredi 18 avril 2007
Statut
Modérateur
Dernière intervention
23 avril 2024
1 609
9 août 2012 à 18:55
9 août 2012 à 18:55
merci à vous deux, je regarde ça demain, et je vous tiens au courant.
dubcek
Messages postés
18718
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
22 mars 2024
5 615
10 août 2012 à 08:30
10 août 2012 à 08:30
hello
$ awk '{g="\x27"; gsub("[|]", g "," g); print g $0 g}' fichier 'aaaaaaaa','bbb bbbbb','cccc cccc','dd.dd' $
dna.factory
Messages postés
24947
Date d'inscription
mercredi 18 avril 2007
Statut
Modérateur
Dernière intervention
23 avril 2024
1 609
10 août 2012 à 08:40
10 août 2012 à 08:40
je vois l'idée, mais je dois me gourrer au \x27
en tapant les 4 caractères, ça m'affiche x27 au lieu de m'afficher l'apostrophe (ksh, TERM=ansi)
en tapant les 4 caractères, ça m'affiche x27 au lieu de m'afficher l'apostrophe (ksh, TERM=ansi)
dubcek
Messages postés
18718
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
22 mars 2024
5 615
Modifié par dubcek le 10/08/2012 à 09:01
Modifié par dubcek le 10/08/2012 à 09:01
\x27 c'est ' (quote), pour éviter les multiples \'
ksh ~ $ print -f "\x27\n" ' ksh ~ $
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
dna.factory
Messages postés
24947
Date d'inscription
mercredi 18 avril 2007
Statut
Modérateur
Dernière intervention
23 avril 2024
1 609
10 août 2012 à 10:22
10 août 2012 à 10:22
apparement, je ne serais pas en ksh, mais en /bin/sh.
je sais pas si ça change beaucoup.
je sais pas si ça change beaucoup.
dna.factory
Messages postés
24947
Date d'inscription
mercredi 18 avril 2007
Statut
Modérateur
Dernière intervention
23 avril 2024
1 609
10 août 2012 à 11:33
10 août 2012 à 11:33
forcément, ça aurait été trop simple...
l'export est au format string, et il faut que je le réimporte aux formats num ou money...là ou je vais devoir m'amuser, c'est quand dans certains cas, faudra que je supprimer les espace, mais dans d'autre pas ^^
je vous tiendrais au courant, au moins j'ai appris un peu sur sed
l'export est au format string, et il faut que je le réimporte aux formats num ou money...là ou je vais devoir m'amuser, c'est quand dans certains cas, faudra que je supprimer les espace, mais dans d'autre pas ^^
je vous tiendrais au courant, au moins j'ai appris un peu sur sed
dna.factory
Messages postés
24947
Date d'inscription
mercredi 18 avril 2007
Statut
Modérateur
Dernière intervention
23 avril 2024
1 609
Modifié par dna.factory le 10/08/2012 à 13:08
Modifié par dna.factory le 10/08/2012 à 13:08
aller encore une petite question sur sed.
Encore une fois, il s'agit d'optimisation graphique du code.
on part de la commande principale.
je rappelle pour ceux qui prennent le train, si y'a un pipe, je le remplace par ','
(la chaine de remplacement est pas importante.)
maintenant, je veux aussi remplacer les valeurs espace pipe et pipe espace.
alors oui, je peux faire trois commandes empilées
mais y'aurait pas moyen de mettre du 'ou' dans la chaine d'origine pour fusionner ces trois commandes ?
Merci
Stop failing the turing test !
Encore une fois, il s'agit d'optimisation graphique du code.
on part de la commande principale.
s/|/','/g
je rappelle pour ceux qui prennent le train, si y'a un pipe, je le remplace par ','
(la chaine de remplacement est pas importante.)
maintenant, je veux aussi remplacer les valeurs espace pipe et pipe espace.
alors oui, je peux faire trois commandes empilées
s/| /','/g;s/ |/','/g;s/|/','/g
mais y'aurait pas moyen de mettre du 'ou' dans la chaine d'origine pour fusionner ces trois commandes ?
Merci
Stop failing the turing test !
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 407
10 août 2012 à 13:07
10 août 2012 à 13:07
$ echo $A |aaaaaaa|bbb bbbbb |cccc cccc| dd.d| $ echo $A | sed "s/^.\|.$/'/g;s/ *| */','/g" 'aaaaaaa','bbb bbbbb','cccc cccc','dd.d' $
dna.factory
Messages postés
24947
Date d'inscription
mercredi 18 avril 2007
Statut
Modérateur
Dernière intervention
23 avril 2024
1 609
10 août 2012 à 14:15
10 août 2012 à 14:15
ha le particularisme de l'étoile dans les regex. Je m'y suis pas encore fait.
en fait, c'est encore mieux que ce que je voulais, parce que coup, même si y'a plusieurs espaces, ça marche aussi..
plus besoin d'utiliser le tr -s du coup.
en fait, c'est encore mieux que ce que je voulais, parce que coup, même si y'a plusieurs espaces, ça marche aussi..
plus besoin d'utiliser le tr -s du coup.
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 407
10 août 2012 à 14:19
10 août 2012 à 14:19
en fait, c'est encore mieux que ce que je voulais, parce que coup, même si y'a plusieurs espaces, ça marche aussi..
Ben vi, l'astérisque matchant zéro, une ou plusieurs occurrences du caractère précédent ;-))
Ben vi, l'astérisque matchant zéro, une ou plusieurs occurrences du caractère précédent ;-))
9 août 2012 à 18:59
tu remplace les | par des ',' (pourquoi je n'y ai pas pensé tout seul... j'avais bien pensé à utiliser s sou vi pour remplacer tous les | par des , ) et je suppose que la deuxième partie c'est pour rajouter une apostrophe au début et à la fin (ça au pire, je saurais le faire en awk).
en gros... tu viens de me dire (sans en être conscient) que je savais faire, c'est juste que je n'avais pas assez réfléchis :)
9 août 2012 à 19:17
Par des " ',' " (quote simple, virgule, quote simple) pour être exact ;-))
et je suppose que la deuxième partie c'est pour rajouter une apostrophe au début et à la fin (ça au pire, je saurais le faire en awk).
Exact ;-)
en gros... tu viens de me dire (sans en être conscient) que je savais faire, c'est juste que je n'avais pas assez réfléchis :)
C'est ce qui nous arrive souvent à tous (chercher midi à quatorze heures), et un oeil extérieur est bien souvent bénéfique.
9 août 2012 à 21:18
non seulement tu peux chercher midi à 14heures, mais tu peux aussi le chercher à 15, 16 17 ou 11 heures.
y'a toujours 50 façons de faire ce que tu veux faire, et en général on s'arrange toujours pour trouver la plus alambiquée
(et je parle même pas de réinventer le fil à couper l'eau tiède...)
10 août 2012 à 09:26
Merci, tiens voila une étoile : http://www.les24heures.org/participants/etoile.png
10 août 2012 à 09:29
Disons que pour tout ce qui est travail sur des champs awk est quand même le plus adapté, par contre en matière de substitution, sed s'impose bien souvent ;-))