web-dev-qa-db-fra.com

Trier les journaux par champ de date dans bash

nous allons avoir

126 Mar  8 07:45:09 nod1 /sbin/ccccilio[12712]: INFO: sadasdasdas
  2 Mar  9 08:16:22 nod1 /sbin/zzzzo[12712]: sadsdasdas
  1 Mar  8 17:20:01 nod1 /usr/sbin/cron[1826]: asdasdas
  4 Mar  9 06:24:01 nod1 /USR/SBIN/CRON[27199]: aaaasdsd
  1 Mar  9 06:24:01 nod1 /USR/SBIN/CRON[27201]: aaadas

Je voudrais trier cette sortie par clé de date et d'heure.

Merci beaucoup.

Martin

22
Mejmo

Pour GNU trier: sort -k2M -k3n -k4

  • -k2M trie par deuxième colonne par mois (de cette façon, "mars" précède "avril")
  • -k3n trie par troisième colonne en mode numérique (de sorte que "9" précède "10")
  • -k4 trie par la quatrième colonne.

Voir plus de détails dans le manuel .

35
user332325

peu hors sujet - mais de toute façon. utile uniquement lorsque vous travaillez dans des arborescences de fichiers

ls -l -r --sort=time

à partir de cela, vous pouvez créer un one-liner qui supprime par exemple la plus ancienne sauvegarde de la ville.

ls -l -r --sort=time | grep backup | head -n1 | while read line; do oldbackup=\`echo $line | awk '{print$8}'\`; rm $oldbackup; done;
7
hias

les jours nécessitent un tri numérique (non lexical), il doit donc être sort -s -k 2M -k 3n -k 4,4

Voir plus de détails ici .

6
llhuii

Vous pouvez utiliser la commande sort:

cat $logfile | sort -M -k 2

Cela signifie: Trier par mois (-M) à partir de la deuxième colonne (-k 2).

4
bmk