Deplacer une colonne /un champ
Utilisateur anonyme
-
lami20j Messages postés 21331 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
lami20j Messages postés 21331 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
Bonjour,
j'ai un fichier (nom_fichier) avec 12 champs (colonnes) qui sont separés par ":" comme suit:
N° idi nom prenom cp ville age sexe salaire N°lot montant nom entreprise type
14528723 : lucot : jack : 75000 : paris : 30: male :35000 : 2 : 215800 : EDF : individuel
21598332 : xavier : francine: 75015 : paris : 25 : femele :25000 :3 :50000 : SNCF : collectif
et en fait je veux deplacer le champ N°11 et le mettre en premeir :
nom entreprise : N° idi : nom : prenom : cp : ville : age : sexe : salaire : N°lot : montant : type
EDF : 14528723 : lucot : jack : 75000 : paris : 30: male :35000 : 2 : 215800 : individuel
SNCF : 21598332 : xavier : francine: 75015 : paris : 25 : femele :25000 :3 :50000 : collectif
comment faire? j'ai trouvé 2 formules en cherchant sur internet mais sa na pas marché:
$ awk '{ print $11" "$1" "$2" "$3" "$4" "$5" "$6" "$7" "$8" "$9" "$10" "$12 }' nom_fichier
$ awk -F: -v OFS \u003d, '(print 11 $, 1 $,2 $, 3 $, 4 $, 5 $, 6 $, 7 $, 8 $, 9 $, 10 $, 12 $)' ==> je ne sais meme pas c'est quoi "OFS" et "u003d" ???
merci de m'aider !!
j'ai un fichier (nom_fichier) avec 12 champs (colonnes) qui sont separés par ":" comme suit:
N° idi nom prenom cp ville age sexe salaire N°lot montant nom entreprise type
14528723 : lucot : jack : 75000 : paris : 30: male :35000 : 2 : 215800 : EDF : individuel
21598332 : xavier : francine: 75015 : paris : 25 : femele :25000 :3 :50000 : SNCF : collectif
et en fait je veux deplacer le champ N°11 et le mettre en premeir :
nom entreprise : N° idi : nom : prenom : cp : ville : age : sexe : salaire : N°lot : montant : type
EDF : 14528723 : lucot : jack : 75000 : paris : 30: male :35000 : 2 : 215800 : individuel
SNCF : 21598332 : xavier : francine: 75015 : paris : 25 : femele :25000 :3 :50000 : collectif
comment faire? j'ai trouvé 2 formules en cherchant sur internet mais sa na pas marché:
$ awk '{ print $11" "$1" "$2" "$3" "$4" "$5" "$6" "$7" "$8" "$9" "$10" "$12 }' nom_fichier
$ awk -F: -v OFS \u003d, '(print 11 $, 1 $,2 $, 3 $, 4 $, 5 $, 6 $, 7 $, 8 $, 9 $, 10 $, 12 $)' ==> je ne sais meme pas c'est quoi "OFS" et "u003d" ???
merci de m'aider !!
A voir également:
- Deplacer une colonne /un champ
- Déplacer une colonne excel - Guide
- Trier une colonne excel - Guide
- Colonne word - Guide
- Formule somme excel colonne - Guide
- Figer une colonne excel - Guide
4 réponses
Re,
Essaie
Essaie
~$ cat adresse 14528723 : lucot : jack : 75000 : paris : 30: male :35000 : 2 : 215800 : EDF : individuel 21598332 : xavier : francine: 75015 : paris : 25 : femele :25000 :3 :50000 : SNCF : collectif ~$ awk -F" *: *" '{printf "%s : ",$11 ; for(i=1;i<11;++i)printf "%s : ",$i};{print $12}' adresse EDF : 14528723 : lucot : jack : 75000 : paris : 30 : male : 35000 : 2 : 215800 : individuel SNCF : 21598332 : xavier : francine : 75015 : paris : 25 : femele : 25000 : 3 : 50000 : collectif
hello
autre variante avec awk
autre variante avec awk
$ cat a2 14528723 : lucot : jack : 75000 : paris : 30: male :35000 : 2 : 215800 : EDF : individuel 21598332 : xavier : francine: 75015 : paris : 25 : femele :25000 :3 :50000 : SNCF : collectif $ awk 'BEGIN{FS=OFS=":"};{x=$11;$11="";sub("::",":");print x, $0}' < a2 EDF :14528723 : lucot : jack : 75000 : paris : 30: male :35000 : 2 : 215800 : individuel SNCF :21598332 : xavier : francine: 75015 : paris : 25 : femele :25000 :3 :50000 : collectif $
Salut,
Plus élégante, cette variante ;-)
Je ne suis pas encore très rodé avec awk ;-)
Avec perl j'aurais fait comme ça
Plus élégante, cette variante ;-)
Je ne suis pas encore très rodé avec awk ;-)
Avec perl j'aurais fait comme ça
:~$ cat adresse 14528723 : lucot : jack : 75000 : paris : 30: male :35000 : 2 : 215800 : EDF : individuel 21598332 : xavier : francine: 75015 : paris : 25 : femele :25000 :3 :50000 : SNCF : collectif ~$ perl -pe 's/((?:.*?\s*:\s*){10})(.*:)(.*)/$2$1$3/' adresse EDF :14528723 : lucot : jack : 75000 : paris : 30: male :35000 : 2 : 215800 : individuel SNCF :21598332 : xavier : francine: 75015 : paris : 25 : femele :25000 :3 :50000 : collectif
j'ai essayé avec sed, mais je ne comprends pas pourquoi ça marche
$ cat a2 14528723 : lucot : jack : 75000 : paris : 30: male :35000 : 2 : 215800 : EDF : individuel 21598332 : xavier : francine: 75015 : paris : 25 : femele :25000 :3 :50000 : SNCF : collectif $ $ sed 's/\(.*:\)\(.*:\)/\2\1/' a2 EDF :14528723 : lucot : jack : 75000 : paris : 30: male :35000 : 2 : 215800 : individuel SNCF :21598332 : xavier : francine: 75015 : paris : 25 : femele :25000 :3 :50000 : collectif
Re,
La 1ère capture avale tout, ensuite sous contrainte la regex doit céder au moins un : (la 2ème capture)
Comme .* de la 2ème capture est aussi gourmande, va prendre tout entre l'avant dernier : et le dernier : (la pos 11) mais ce que se trouve après le dernier : n'est pas pris en compte
Si tu avais un : à la fin tu aurais obtenu ceci
Pour éliminer l'espace au début de 1er champ
P.S. Vu qu'il a demandé le champs 11 je suis parti pour le groupement des 10 premiers sans trop me pencher sur le problème, mais en fait tu as raison il aurait fallu profiter de la gourmandise tout simplement
La 1ère capture avale tout, ensuite sous contrainte la regex doit céder au moins un : (la 2ème capture)
Comme .* de la 2ème capture est aussi gourmande, va prendre tout entre l'avant dernier : et le dernier : (la pos 11) mais ce que se trouve après le dernier : n'est pas pris en compte
Si tu avais un : à la fin tu aurais obtenu ceci
:~$ sed 's/\(.*:\)\(.*:\)/\2\1/' a3 individuel:14528723 : lucot : jack : 75000 : paris : 30: male :35000 : 2 : 215800 : EDF : collectif:21598332 : xavier : francine: 75015 : paris : 25 : femele :25000 :3 :50000 : SNCF :
Pour éliminer l'espace au début de 1er champ
:~$ sed 's/\(.*: *\)\(.*:\)/\2\1/' a2 EDF :14528723 : lucot : jack : 75000 : paris : 30: male :35000 : 2 : 215800 : individuel SNCF :21598332 : xavier : francine: 75015 : paris : 25 : femele :25000 :3 :50000 : collectif
P.S. Vu qu'il a demandé le champs 11 je suis parti pour le groupement des 10 premiers sans trop me pencher sur le problème, mais en fait tu as raison il aurait fallu profiter de la gourmandise tout simplement
:~$ perl -pe 's/(.*\s*:\s*)(.*:)/$2$1/' a2 EDF :14528723 : lucot : jack : 75000 : paris : 30: male :35000 : 2 : 215800 : individuel SNCF :21598332 : xavier : francine: 75015 : paris : 25 : femele :25000 :3 :50000 : collectif