Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 roll


-- 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 big_smile

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