Gawk.exe : insertion d'espace entre champs
Fermé
eZula
Messages postés
3391
Date d'inscription
samedi 26 avril 2008
Statut
Contributeur
Dernière intervention
8 mai 2021
-
18 juin 2008 à 10:32
eZula Messages postés 3391 Date d'inscription samedi 26 avril 2008 Statut Contributeur Dernière intervention 8 mai 2021 - 2 juil. 2008 à 09:31
eZula Messages postés 3391 Date d'inscription samedi 26 avril 2008 Statut Contributeur Dernière intervention 8 mai 2021 - 2 juil. 2008 à 09:31
20 réponses
eZula
Messages postés
3391
Date d'inscription
samedi 26 avril 2008
Statut
Contributeur
Dernière intervention
8 mai 2021
392
18 juin 2008 à 11:03
18 juin 2008 à 11:03
Bon, pour l'insertion d'un espace il suffit d'ajouter une virgule entre chaque champ
en revanche comment insérer un caractère précis tel que le ; ? j'imagine que c'est possible avec sed mais la comande risque d'être interminable...
ou comment à la limite ne pas supprimer le séparateur FS défini lors de l'impression ?
cat EvalDossier.csv | gawk -F";" "{print $2,$3,$4}" >> 1.txt
en revanche comment insérer un caractère précis tel que le ; ? j'imagine que c'est possible avec sed mais la comande risque d'être interminable...
ou comment à la limite ne pas supprimer le séparateur FS défini lors de l'impression ?
dubcek
Messages postés
18758
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
24 décembre 2024
5 623
18 juin 2008 à 12:40
18 juin 2008 à 12:40
ou utiliser printf
printf("%s;%s;%s\n", $2,$3,$4)
printf("%s;%s;%s\n", $2,$3,$4)
eZula
Messages postés
3391
Date d'inscription
samedi 26 avril 2008
Statut
Contributeur
Dernière intervention
8 mai 2021
392
18 juin 2008 à 13:34
18 juin 2008 à 13:34
Merci. Par contre la commande entière tu l'écrirais comment ? car les quelques essais engagés ne donnent rien...
dubcek
Messages postés
18758
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
24 décembre 2024
5 623
18 juin 2008 à 13:40
18 juin 2008 à 13:40
gawk sous windows, il faut " et donc protéger ceux du printf
cat EvalDossier.csv | gawk -F";" "{printf(\"%s;%s;%s\n\", $2,$3,$4)}" >> 1.txt
cat EvalDossier.csv | gawk -F";" "{printf(\"%s;%s;%s\n\", $2,$3,$4)}" >> 1.txt
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
eZula
Messages postés
3391
Date d'inscription
samedi 26 avril 2008
Statut
Contributeur
Dernière intervention
8 mai 2021
392
18 juin 2008 à 13:51
18 juin 2008 à 13:51
Ok, je me demandais s'il fallait conserver gawk... En revanche, il faut doubler les % sinon le résultat n'est pas bon :
Merci pour ton aide ;)
cat EvalDossier.csv | gawk -F";" "{printf(\"%%s;%%s;%%s\n\", $2,$3,$4)}" >> 1.txt
Merci pour ton aide ;)
eZula
Messages postés
3391
Date d'inscription
samedi 26 avril 2008
Statut
Contributeur
Dernière intervention
8 mai 2021
392
18 juin 2008 à 16:22
18 juin 2008 à 16:22
Question bête, mais si je souhaite imprimer 20 champs, il faut mettre 20 fois %%s ? j'ai l'impression que oui mais s'il existe une option pour généraliser...
dubcek
Messages postés
18758
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
24 décembre 2024
5 623
18 juin 2008 à 17:19
18 juin 2008 à 17:19
faire une boucle
for(n=1;n<20;n++)printf(\"%%s\", $n)
for(n=1;n<20;n++)printf(\"%%s\", $n)
eZula
Messages postés
3391
Date d'inscription
samedi 26 avril 2008
Statut
Contributeur
Dernière intervention
8 mai 2021
392
20 juin 2008 à 09:59
20 juin 2008 à 09:59
Ok.
J'ai encore un souci de taille. Cette commande sort parfaitement bien les champs demandés. Par contre je souhaiterais supprimer un champ conditionnellement :
si la cellule 3 contient l'expression "Confirmation de candidature", alors supprimer le contenu de la 12ème cellule du tableau (sachant qu'il peut y avoir autre chose dans cette 3ème cellule que "Confirmation de candidature" et qu'il faut laisser dans ce cas).
En d'autres termes, il s'agit de supprimer le contenu de la 9ème cellule suivant la cellule contenant l'expression "Confirmation de candidature".
J'ai testé avec sed quelque chose dans le genre :
qui pose un très gros problème puisque le contenu des cellules intermédiaires (entre 3 et 12) est supprimé.
Sed c'est la bonne approche ? ou il faut combiner avec cut, grep ou autre chose ?
Merci encore
J'ai encore un souci de taille. Cette commande sort parfaitement bien les champs demandés. Par contre je souhaiterais supprimer un champ conditionnellement :
si la cellule 3 contient l'expression "Confirmation de candidature", alors supprimer le contenu de la 12ème cellule du tableau (sachant qu'il peut y avoir autre chose dans cette 3ème cellule que "Confirmation de candidature" et qu'il faut laisser dans ce cas).
En d'autres termes, il s'agit de supprimer le contenu de la 9ème cellule suivant la cellule contenant l'expression "Confirmation de candidature".
J'ai testé avec sed quelque chose dans le genre :
sed "s/;Confirmation de candidature;.*;.*;.*;.*;.*;.*;.*;.*;.*;//g"
qui pose un très gros problème puisque le contenu des cellules intermédiaires (entre 3 et 12) est supprimé.
Sed c'est la bonne approche ? ou il faut combiner avec cut, grep ou autre chose ?
Merci encore
dubcek
Messages postés
18758
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
24 décembre 2024
5 623
20 juin 2008 à 10:22
20 juin 2008 à 10:22
une possibilité:
if($3 == "Confirmation de candidature")$12=""
$12 égale rien, on l'annule
if($3 == "Confirmation de candidature")$12=""
$12 égale rien, on l'annule
eZula
Messages postés
3391
Date d'inscription
samedi 26 avril 2008
Statut
Contributeur
Dernière intervention
8 mai 2021
392
20 juin 2008 à 10:40
20 juin 2008 à 10:40
le souci c'est comment insérer cette condition dans la commande de départ :
cat EvalDossier.csv | gawk -F";" "{printf(\"%%s;%%s;%%s;%%s;%%s;%%s;%%s;%%s;%%s;%%s;%%s;%%s;%%s;%%s\n\", $2,$3,$13,$14,$15,$7,$8,$9,$10,$11,$12,$16,$17,$18)}" >> 1.csv
PS : finalement je n'ai pas utilisé la boucle for du post 7, c'était juste une question de curiosité
cat EvalDossier.csv | gawk -F";" "{printf(\"%%s;%%s;%%s;%%s;%%s;%%s;%%s;%%s;%%s;%%s;%%s;%%s;%%s;%%s\n\", $2,$3,$13,$14,$15,$7,$8,$9,$10,$11,$12,$16,$17,$18)}" >> 1.csv
PS : finalement je n'ai pas utilisé la boucle for du post 7, c'était juste une question de curiosité
dubcek
Messages postés
18758
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
24 décembre 2024
5 623
20 juin 2008 à 11:22
20 juin 2008 à 11:22
"{if($3 == \"Confirmation de candidature\")$12=\"\" ; printf(\"%.......
eZula
Messages postés
3391
Date d'inscription
samedi 26 avril 2008
Statut
Contributeur
Dernière intervention
8 mai 2021
392
20 juin 2008 à 11:32
20 juin 2008 à 11:32
pour être certain, c'est bien là :
?
ça n'a pas l'air de marcher dans cette position...
cat EvalDossier.csv | gawk -F";" "{"{if($3 == \"Confirmation de candidature\")$12=\"\" ; printf(\"%%s;%%s;%%s;%%s;%%s;%%s;%%s;%%s;%%s;%%s;%%s;%%s;%%s;%%s\n\", $2,$3,$13,$14,$15,$7,$8,$9,$10,$11,$12,$16,$17,$18)}" >> 1.csv
?
ça n'a pas l'air de marcher dans cette position...
dubcek
Messages postés
18758
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
24 décembre 2024
5 623
20 juin 2008 à 12:53
20 juin 2008 à 12:53
il y a des " en trop
cat EvalDossier.csv | gawk -F";" "{if($3 == \"Confirmation de candidature\")$12=\"\" ; printf(\"%%s;%%s;%%s;%%s;%%s;%%s;%%s;%%s;%%s;%%s;%%s;%%s;%%s;%%s\n\", $2,$3,$13,$14,$15,$7,$8,$9,$10,$11,$12,$16,$17,$18)}" >> 1.csv
eZula
Messages postés
3391
Date d'inscription
samedi 26 avril 2008
Statut
Contributeur
Dernière intervention
8 mai 2021
392
20 juin 2008 à 15:47
20 juin 2008 à 15:47
ça n'a pas l'air de fonctionner non plus, les cellules contenant "Confirmation de candidature" et la 9ème cellule qui suit sont laissées telles quelles (non vides)
dubcek
Messages postés
18758
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
24 décembre 2024
5 623
20 juin 2008 à 15:56
20 juin 2008 à 15:56
est ce que $3 contient ou est exactement égal à "Confirmation de candidature" ?
eZula
Messages postés
3391
Date d'inscription
samedi 26 avril 2008
Statut
Contributeur
Dernière intervention
8 mai 2021
392
20 juin 2008 à 17:00
20 juin 2008 à 17:00
j'avais commencé à regarder justement si les cellules correspondaient bien mais j'ai du basculer sur autre chose, et ne pourrais pas reprendre avant le début de semaine prochaine.
Pour info, j'utilise un logiciel de gestion RH (Relation) qui livre des résultats de requêtes sous forme d'un tableau excel complètement désordonné, ce qu'on est en train de faire est une piste vachement intéressante pour ranger tout ça.
Je te tiendrais au courant dès que possible et te remercie encore une fois.
Pour info, j'utilise un logiciel de gestion RH (Relation) qui livre des résultats de requêtes sous forme d'un tableau excel complètement désordonné, ce qu'on est en train de faire est une piste vachement intéressante pour ranger tout ça.
Je te tiendrais au courant dès que possible et te remercie encore une fois.
dubcek
Messages postés
18758
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
24 décembre 2024
5 623
20 juin 2008 à 17:24
20 juin 2008 à 17:24
le == teste l'égalité d'un string
le ~ teste "qui contient"
le ~ teste "qui contient"
eZula
Messages postés
3391
Date d'inscription
samedi 26 avril 2008
Statut
Contributeur
Dernière intervention
8 mai 2021
392
24 juin 2008 à 15:47
24 juin 2008 à 15:47
Salut dubcek,
par curiosité j'ai testé "contient" :
cat EvalDossier.csv | gawk -F";" "{if($3~\"Confirmation de candidature\").....
et ça a l'air de bloquer : fermeture quasi immédiate du terminal DOS
Sinon l'idée, c'est que si dans le tableau originel la colonne 13 contient "Confirmation de candidature", alors ne pas afficher son commentaire correspondant qui se trouve dans la colonne 16
j'ai l'impression de mélanger un peu le tableau de départ avec celui de sortie
par curiosité j'ai testé "contient" :
cat EvalDossier.csv | gawk -F";" "{if($3~\"Confirmation de candidature\").....
et ça a l'air de bloquer : fermeture quasi immédiate du terminal DOS
Sinon l'idée, c'est que si dans le tableau originel la colonne 13 contient "Confirmation de candidature", alors ne pas afficher son commentaire correspondant qui se trouve dans la colonne 16
j'ai l'impression de mélanger un peu le tableau de départ avec celui de sortie
dubcek
Messages postés
18758
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
24 décembre 2024
5 623
25 juin 2008 à 12:17
25 juin 2008 à 12:17
{if($3 ~ \"texte\")...
chez ¨moi, cela fonctionne, si le champ 3 contient texte, le test est vrai
chez ¨moi, cela fonctionne, si le champ 3 contient texte, le test est vrai
eZula
Messages postés
3391
Date d'inscription
samedi 26 avril 2008
Statut
Contributeur
Dernière intervention
8 mai 2021
392
2 juil. 2008 à 09:31
2 juil. 2008 à 09:31
Hélas, pas chez moi. Ecoute, je me permets de te proposer le fichier originel http://www.cijoint.fr/cjlink.php?file=cj200807/cij9jwP3BJ.xls si tu as un peu de temps pour regarder, car la précédente commande ne fonctionne pas.
Pour rappel, l'objectif premier est de ne pas pas afficher dans le tableau 1.csv - issu de la commande précédente - le contenu de la cellule Mi si celle-ci contient l'expression "Confirmation de candidature". Cette cellule Mi correspond à l'Action1 (titre de la colonne M), et dans l'idéal il faudrait également ne pas afficher le contenu de la cellule "Suivi-Commentaire (Général)1" qui lui correspond dans la cellule Pi
Tout le reste doit être affiché conformément à ce que nous avons fait plus haut :
$2,$3,$13,$14,$15,$7,$8,$9,$10,$11,$12,$16,$17,$18
Pour rappel, l'objectif premier est de ne pas pas afficher dans le tableau 1.csv - issu de la commande précédente - le contenu de la cellule Mi si celle-ci contient l'expression "Confirmation de candidature". Cette cellule Mi correspond à l'Action1 (titre de la colonne M), et dans l'idéal il faudrait également ne pas afficher le contenu de la cellule "Suivi-Commentaire (Général)1" qui lui correspond dans la cellule Pi
Tout le reste doit être affiché conformément à ce que nous avons fait plus haut :
$2,$3,$13,$14,$15,$7,$8,$9,$10,$11,$12,$16,$17,$18