Portál AbcLinuxu, 7. května 2025 22:21

Dotaz: Filtr (LAST LOG)

pepe_ avatar 21.6.2013 18:41 pepe_ | skóre: 48
Filtr (LAST LOG)
Přečteno: 285×
Odpovědět | Admin

Potřebuji od někoho zkušeného nejjednodužší způsob jak přečíst log.log ve kterém jsou takovéto řádky :

23.05.2013 04:47:15 MJ7HST
24.01.2013 01:23:37 Y02HAL
18.02.2013 03:38:05 RY7HRO
10.04.2013 23:48:43 NL4SNE
01.05.2013 09:47:33 MJ7HST

datum , čas , uživatel (různá délka jména ale žádné mezery)

potřebuji vypsat pouze poslední záznam každého uživatele (filtr posledního logu pro všechny uživatele)

 

Napadá někoho elegantní řešení (awk , sed nebo kdo ví co na to použít) ?

 

Děkuju ...


Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

21.6.2013 21:17 jekub
Rozbalit Rozbalit vše Re: Filtr (LAST LOG)
Odpovědět | | Sbalit | Link | Blokovat | Admin
sort (uzivatel, datum a cas sestupne), readline, pri kazde zmene uzivatele vypsat
pepe_ avatar 22.6.2013 11:57 pepe_ | skóre: 48
Rozbalit Rozbalit vše Re: Filtr (LAST LOG)

cat log.log | awk '{print $3";"$1";"$2}' | sort -r

udělá :

GM1GVM;12.02.2012;14:30:14
D1SKY;16.09.2012;23:08:01
DX0ML;15.01.2013;08:08:39

ale jak dál bez dlouhého patlání v IF a pracovních proměnných ?

23.6.2013 16:53 jekub
Rozbalit Rozbalit vše Re: Filtr (LAST LOG)
#/bin/bash

function print_last_log() {
   if [ $USER != $3 ]; then
      echo $1 $2 $3
      USER=$3
   fi
}

sort -k3 -k1.7nr -k1.4nr -k1nr -k2r log.log | \
while read LINE; do
   print_last_log  $LINE
done
23.6.2013 16:56 jekub
Rozbalit Rozbalit vše Re: Filtr (LAST LOG)
#/bin/bash - chybi !
23.6.2013 16:29 Kriegel
Rozbalit Rozbalit vše Re: Filtr (LAST LOG)
Odpovědět | | Sbalit | Link | Blokovat | Admin
asi to nebude nejjednodussi, ale slozite to taky neni...

#!/usr/bin/env perl 
use strict;
use warnings;

my %lastlog;
open (my $fh,"<","./log.log");
while (<$fh>){
    chomp;
    my ($date, $time, $user) = split " ", $_;
    $lastlog{$user} = $date." ".$time;
}
close $fh;
print "$_\t$lastlog{$_}\n" foreach (keys %lastlog);
23.6.2013 18:46 NN
Rozbalit Rozbalit vše Re: Filtr (LAST LOG)
Odpovědět | | Sbalit | Link | Blokovat | Admin
50c: Vstup:
23.05.2013 04:47:15 MJ7HST
23.05.2013 04:47:18 MJ7HST
24.01.2013 01:23:37 Y02HAL
18.02.2013 03:38:05 RY7HRO
10.04.2013 23:48:43 NL4SNE
01.05.2013 09:47:33 MJ7HST
24.01.2013 01:25:37 Y02HAL
26.01.2013 01:25:37 Y02HAL
10.05.2013 23:48:43 NL4SNE
cat log.log | sort -k 3 -rk 1 -k 2 | uniq -s 20
Vystup:
26.01.2013 01:25:37 Y02HAL
18.02.2013 03:38:05 RY7HRO
10.05.2013 23:48:43 NL4SNE
23.05.2013 04:47:18 MJ7HST
23.6.2013 21:31 potato
Rozbalit Rozbalit vše Re: Filtr (LAST LOG)
To myslím setřídilo pouze se štěstím, protože pro jiný vstup by to narazilo na ten idiotsky netříditelný formát data...
23.6.2013 21:58 NN
Rozbalit Rozbalit vše Re: Filtr (LAST LOG)
Mas pravdu musel bych nejprve sed-em obratit den/mesic(u casoveho udaje to nevadi..), potom je to podle meho nazoru v poradku, tedy:
 cat test.txt | sed -r 's/(.+)\.(.+)\.(.+)/\2\.\1\.\3/' | sort -k 3 -rk 1 -k 2 | uniq -s 20
Ten sed by mohl byt samozrejme prisnejsi..
pepe_ avatar 24.6.2013 20:39 pepe_ | skóre: 48
Rozbalit Rozbalit vše Re: Filtr (LAST LOG)
Odpovědět | | Sbalit | Link | Blokovat | Admin

Děkuji za nápady , určitě něco použiji .

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.