IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

sort | uniq -c


Sujet :

Shell et commandes GNU

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2015
    Messages : 7
    Points : 6
    Points
    6
    Par défaut sort | uniq -c
    Bonjour, j'ouvre cette discussion car j'ai un problème concernant la commande sort | uniq -c

    Je souhaite écrire un programme qui me permettra de lire mes logs sous une forme
    plus lisible tout en ne retirant que les informations qui m'intéressent.
    Sur le principe, ce n'est pas bien méchant, certes, mais je bloque.

    EN fait, je cherche à matcher les IP bannies sur les dernières 24h. Ensuite, j'utilise un sort | uniq-c pour
    compter le nombre de fois qu'une IP a été bannie.
    Voici la commande correspondante:
    Nom : script.PNG
Affichages : 112
Taille : 2,7 Ko

    Or, lorsque j'affiche sa sous forme de tableau, le nombre de ban s'affiche avant l'IP:

    Nom : script affichage.PNG
Affichages : 108
Taille : 2,1 Ko

    Je sais que c'est le uniq -c qui affiche le nombre avant la valeur, mais n'ya t-il pas un moyen d'inverser l'affichage?
    j'avais penser rediriger l'affichage de cette commande dans un fichier et lire ensuite ce fichier à l'envers (avec un tac?)
    mais je ne pense pas que ce soit le plus optimisé!

    Je commence à connaître quelques trucs en shell, mais reste malgré tout un débutant.
    Peut-être que ma question paraîtra simpliste pour certains, mais si on pouvait me donner un réponse
    ça m'aiderai grandement!

    En vous remerciant et vous souhaitant un agréable après-midi

  2. #2
    Membre confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Octobre 2010
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2010
    Messages : 178
    Points : 618
    Points
    618
    Par défaut
    Une solution: Inverse avec awk.

    Normal:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ls | sort | uniq -c 
          1 Bureau/
          1 Documents/
          1 Images/
          1 Modèles/

    Inversé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ls | sort | uniq -c | awk -F' ' '{print $2" "$1}'
    Bureau/ 1
    Documents/ 1
    Images/ 1
    Modèles/ 1

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2015
    Messages : 7
    Points : 6
    Points
    6
    Par défaut Merci!
    Yeeeah merci ça marche!!
    C'est tout bête en plus
    Ce qui me gène c'est la cascade de pipe quoi :/
    Mais je vais déjà faire

    Merci pour l'efficacité et la rapidité

  4. #4
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    salut,

    tu peux tout mettre dans le awk directement, et y compris re-trier derrière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk -vpattern="$madate" '$0 ~ "^" pattern ".*WARNING.*Ban" {tab[$7]++} END {for (i in tab) {print i "\t" tab[i] | "sort -rnk2"}}'
    j'utilise _très_ souvent cette technique plutot que de recourir au sempiternel sort | uniq -c | sort -rn

  5. #5
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 276
    Points : 12 717
    Points
    12 717
    Par défaut
    Bonjour,
    Concernant la commande awk de BufferBob, sous gawk, la traversée d'un tableau peut-être définie, et donc d'éviter le passage par sort.
    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $ cat ff1.txt 
    2	B
    4	D
    5	E
    1	A
    6	F
    7	G
    8	H
    3	C
    9	I
    Sortie en ordre ascendant de l'indice (donc colonne 2 du fichier)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $ awk 'BEGIN{PROCINFO["sorted_in"] = "@ind_str_asc"}{A[$2]=$1}END{for (i in A) {print i,A[i]}}' ff1.txt 
    A 1
    B 2
    C 3
    D 4
    E 5
    F 6
    G 7
    H 8
    I 9
    Sortie en ordre descendant de l'indice (donc colonne 2 du fichier)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $ awk 'BEGIN{PROCINFO["sorted_in"] = "@ind_str_desc"}{A[$2]=$1}END{for (i in A) {print i,A[i]}}' ff1.txt 
    I 9
    H 8
    G 7
    F 6
    E 5
    D 4
    C 3
    B 2
    A 1
    Il existe d'autres fonctions prédéfinies, mais il est aussi possible de créer ces propres fonctions de trie.
    Pour plus d'information, voir info gawk Controlling Scanning
    Cordialement.

  6. #6
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 242
    Points : 13 457
    Points
    13 457
    Par défaut
    Bonjour

    Tu devrais utiliser "printf" pour avoir un joli tableau régulier plutôt que cet affichage aléatoire.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. StringGrid sort
    Par clovis dans le forum C++Builder
    Réponses: 4
    Dernier message: 20/10/2004, 21h46
  2. erreur me sort
    Par wperle dans le forum XQUERY/SGBD
    Réponses: 10
    Dernier message: 23/02/2004, 13h19
  3. sorte de valeur par defaut
    Par sampq dans le forum Langage SQL
    Réponses: 2
    Dernier message: 25/07/2003, 11h59
  4. xsl:sort
    Par Pierre63 dans le forum XMLRAD
    Réponses: 2
    Dernier message: 03/07/2003, 12h37
  5. JBuilder 7 personnal sort à chaque save
    Par Hannouz dans le forum JBuilder
    Réponses: 4
    Dernier message: 17/12/2002, 22h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo