#1 Le 25/05/2009, à 17:36
- vanhell
Ajouter numéro de la ligne entre deux colonnes
Bonjour,
J'ai un fichier texte avec 7 colonnes séparés par des ;
J'ai voulu ajouter le numéro de la ligne entre la colonne 5 et 6, je l'ai fait avec awk, ça fonctionne mais ça doit pas être la meilleure façon de faire loin de la XD
Si vous avez une autre méthode avec awk ou un autre outil n'hésitez pas!
ma commande :
awk 'BEGIN{FS=OFS=";"} {print $1 OFS $2 OFS $3 OFS $4 OFS $5 OFS NR OFS $6 OFS $7}'
#2 Le 25/05/2009, à 21:22
- hardball
Re : Ajouter numéro de la ligne entre deux colonnes
bon le pire c'est qu'il y a surement encore plus simple que ça :
perl -F\; -lane 'splice@F,5,0,$.;print+join";",@F'
Dernière modification par hardball (Le 25/05/2009, à 21:23)
-- Toshiba satelliteA100-335 + Ubuntu Jaunty --
Pour les noobs : Bienvenue ! ici la perséverance vous récompense.
Pour les anciens : Merci à vous de partager votre savoir.
Et vive le perl !
Hors ligne
#3 Le 25/05/2009, à 21:22
- Totor
Re : Ajouter numéro de la ligne entre deux colonnes
Bonsoir,
ou plus simplement comme ceci (fonctionne avec gawk, mais si je me souviens bien, tu ne l'as pô) :
awk -F\; '{gensub(/;/,";"NR";",5)}' fichier
Le principe : remplacer la 5ème occurrence de ; par ;NR;
Sinon, avec sed :
sed = fichier | sed 'N;s/;/;\n/5;s/^\(.*\)\n\(.*\)\n\(.*\)$/\2\1;\3/'
-- Lucid Lynx --
Hors ligne
#4 Le 26/05/2009, à 01:09
- vanhell
Re : Ajouter numéro de la ligne entre deux colonnes
Merci de vos réponses j'essayerai ça demain.
J'aimerai tester la vitesse d'exécution de chaque commande pour choisir la plus rapide, il existe une commande faite pour ça, ou sinon comment faire?
#5 Le 26/05/2009, à 06:04
- Alain.g
Re : Ajouter numéro de la ligne entre deux colonnes
Bonjour
awk 'BEGIN{FS=OFS=";"} {$5=$5 OFS NR; print}'
Xubuntu Karmic !
Hors ligne
#6 Le 26/05/2009, à 09:30
- Totor
Re : Ajouter numéro de la ligne entre deux colonnes
tient ! je ne savais pas que l'on pouvait changer la valeur d'un champ...
ça ne me parait pas aberrant, d'autant plus que certaines fonctions le font !
bon à savoir.
merci.
-- Lucid Lynx --
Hors ligne
#7 Le 26/05/2009, à 10:57
- vanhell
Re : Ajouter numéro de la ligne entre deux colonnes
Ah voila je savais bien qu'il y avait une méthode plus simple que la mienne avec awk!
Merci Alain.g et tous les autres.
#8 Le 26/05/2009, à 11:18
- hardball
Re : Ajouter numéro de la ligne entre deux colonnes
@Alain.g
puissant le awk !
j'ai essayé de rendre plus clair le perl
cat file | perl -F";" -lane '$,=";"; splice(@F,5,0,$.); print@F'
je continue à chercher une commande plus courte mais je ne suis pas (encore) au niveau des mongueurs de l'uniligne
-- Toshiba satelliteA100-335 + Ubuntu Jaunty --
Pour les noobs : Bienvenue ! ici la perséverance vous récompense.
Pour les anciens : Merci à vous de partager votre savoir.
Et vive le perl !
Hors ligne
#9 Le 03/06/2009, à 00:39
- hardball
Re : Ajouter numéro de la ligne entre deux colonnes
bon je m'amuse tout seul...
yavait un truc à faire du côté des regexp
34 caractères pour la commande suivante :
perl -pe 's/(([^;]+;){5})/$1$.;/'
-- Toshiba satelliteA100-335 + Ubuntu Jaunty --
Pour les noobs : Bienvenue ! ici la perséverance vous récompense.
Pour les anciens : Merci à vous de partager votre savoir.
Et vive le perl !
Hors ligne
#10 Le 03/06/2009, à 21:57
- Ford Prefect
Re : Ajouter numéro de la ligne entre deux colonnes
Attention, hardball, les champs ne sont peut-être pas remplis, il peut s'agir d'un CSV avec certains champs vides, donc:
perl -pe 's/(([^;]*;){5})/$1$.;/'
Pas mieux...
#11 Le 01/02/2010, à 14:43
- hardball
Re : Ajouter numéro de la ligne entre deux colonnes
ayet ! j'ai gagné 2 caractères !
c'est plus clair maintenant
perl -pe 's/((.*?;){5})/$1$.;/'
-- Toshiba satelliteA100-335 + Ubuntu Jaunty --
Pour les noobs : Bienvenue ! ici la perséverance vous récompense.
Pour les anciens : Merci à vous de partager votre savoir.
Et vive le perl !
Hors ligne