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 21/05/2013, à 19:30

mond14

(Résolu) Calculer et trier on se basant su un champs

Bonsoir,
J'espère que vous allez tous bien,

j'ai un document texte qui contient des lignes et des champs qui sont séparer par un ; (point_virgule).
je veux appliquer la commande "sort" sur ces ligne en se basant sur la troisème colonne et calculer le nombre de chaque valeur du champs 3 et mettre le resultat dans un nouveau champs à la fin.

EDIJH1;HomH1;687100098;EDIT;OK
KHUIG;HomH1;5664000577;EDIT;OK
THRT1;HomH1;76756000468;EDIT;OK
KHTJG;HomH1;5664000577;EDIT;OK
THRT1;HomH1;76756000468;EDIT;OK

merci pour votre aide

Dernière modification par mond14 (Le 22/05/2013, à 11:27)

Hors ligne

#2 Le 21/05/2013, à 19:45

pingouinux

Re : (Résolu) Calculer et trier on se basant su un champs

Rebonjour,
Déjà, pour faire le tri

$ sort -n -t";" -k3,3 fichier
EDIJH1;HomH1;687100098;EDIT;OK
KHTJG;HomH1;5664000577;EDIT;OK
KHUIG;HomH1;5664000577;EDIT;OK
THRT1;HomH1;76756000468;EDIT;OK
THRT1;HomH1;76756000468;EDIT;OK

Ajouté :
Je ne suis pas certain que ce soit ceci que tu veuilles

$ sort -n -t";" -k3,3 fichier | awk 'BEGIN{FS=OFS=";"}{$6=++n[$3];print}'
EDIJH1;HomH1;687100098;EDIT;OK;1
KHTJG;HomH1;5664000577;EDIT;OK;1
KHUIG;HomH1;5664000577;EDIT;OK;2
THRT1;HomH1;76756000468;EDIT;OK;1
THRT1;HomH1;76756000468;EDIT;OK;2

ou bien cela

$ sort -n -t";" -k3,3 ii | awk 'BEGIN{FS=OFS=";"}{c3=$3;$6=++n[c3];print}'|tac|awk 'BEGIN{FS=OFS=";"}{if(n[$3]++)$6=c6;else c6=$6;print}'|tac
EDIJH1;HomH1;687100098;EDIT;OK;1
KHTJG;HomH1;5664000577;EDIT;OK;2
KHUIG;HomH1;5664000577;EDIT;OK;2
THRT1;HomH1;76756000468;EDIT;OK;2
THRT1;HomH1;76756000468;EDIT;OK;2

Dernière modification par pingouinux (Le 21/05/2013, à 20:03)

Hors ligne

#3 Le 21/05/2013, à 20:02

mond14

Re : (Résolu) Calculer et trier on se basant su un champs

Bonsoir,
Merci beaucoupe pour votre réponse Monsieur,

ce que je veux c'est qu'il me met par exemple ça

EDIJH1;HomH1;687100098;EDIT;OK;1
KHTJG;HomH1;5664000577;EDIT;OK;2
KHUIG;HomH1;5664000577;EDIT;OK;2
THRT1;HomH1;76756000468;EDIT;OK;2
THRT1;HomH1;76756000468;EDIT;OK;2

je veut qu'il me donne dans le dernier champsle nombre de fois ou la valeur du champs 3 se repete dan le fichier

merci beacoup

Hors ligne

#4 Le 21/05/2013, à 20:25

pingouinux

Re : (Résolu) Calculer et trier on se basant su un champs

Ça correspond à ma dernière proposition en #2.

Hors ligne

#5 Le 21/05/2013, à 20:34

mond14

Re : (Résolu) Calculer et trier on se basant su un champs

Merci beaucoup pour votre aid smile

Hors ligne

#6 Le 21/05/2013, à 23:31

mond14

Re : (Résolu) Calculer et trier on se basant su un champs

Bonsoir,

j'ai une autre question s'il vous plait.

et si on veut calculer on se basant sur deux champs le troisième et le sixième?

exemple :

EDIJH1;HomH1;687100098;EDIT;OK;5555555
KHTJG;HomH1;5664000577;EDIT;OK;9999999
KHUIG;HomH1;5664000577;EDIT;OK;9999999
THRT1;HomH1;76756000468;EDIT;OK;7676767
THRT1;HomH1;76756000468;EDIT;OK;9292929

si on veut un resultat comme ça qu'onva ajouter en 7ème champs :

EDIJH1;HomH1;687100098;EDIT;OK;5555555;1
KHTJG;HomH1;5664000577;EDIT;OK;9999999;2
KHUIG;HomH1;5664000577;EDIT;OK;9999999;2
THRT1;HomH1;76756000468;EDIT;OK;7676767;1
THRT1;HomH1;76756000468;EDIT;OK;9292929;1

qu'est ce qu'on doit modifier dans le codes?

$ sort -n -t";" -k3,3 ii | awk 'BEGIN{FS=OFS=";"}{c3=$3;$6=++n[c3];print}'|tac|awk 'BEGIN{FS=OFS=";"}{if(n[$3]++)$6=c6;else c6=$6;print}'|tac

Hors ligne

#7 Le 22/05/2013, à 06:39

pingouinux

Re : (Résolu) Calculer et trier on se basant su un champs

S'agit-il d'un exercice d'école ?

Sur quel(s) champ(s) faut-il trier les lignes ?
Faut-il ensuite compter les lignes dont le champ 6 est identique, ou la concaténation des champs 3 et 6 ?

Hors ligne

#8 Le 22/05/2013, à 11:27

mond14

Re : (Résolu) Calculer et trier on se basant su un champs

Bonjour ,

Merci j'ai trouvé la solution,

awk -F";" '{a[$3,$6]++; aa[++n]=$0}END{for(i=1;i<=n;i++){split(aa[i],A,";");print aa[i]";"a[A[3],A[6]]}}' fichier | sort ...

merci

Hors ligne