bash - skrypt zliczaj

Potrzebujesz pomocy z C, C++, perl, python, itp.
pmielcza
Posty: 7
Rejestracja: 30 marca 2010, 18:51

bash - skrypt zliczający wydruki z pliku /var/log/cups/page_log

Post autor: pmielcza »

Witam.
Poszukuję gotowego skryptu, który z pliku /var/log/cups/page_log wydobędzie dane i zapisze do innego pliku np. wydruki.txt w postaci

Kod: Zaznacz cały

User Jobs Pages
JUREK 39 101
hobbit 114 304
 
Printer Jobs Pages
Kyocera 121 127
PDFPrint 32 278

Znalazłem coś takiego w internecie ale napisane w perlu, a ja chciałbym to samo (podobne) ale w bashu.

Kod: Zaznacz cały

 #!/usr/bin/perl
 
while (<>) {
        ($printer, $user, $jobsnumber, $date, $offset, 
                $pagenumber, $pages, $opc, $ip) = split(' ');
 
        $PrinterPages{$printer} += $pages;
if (not $Jobs{$jobsnumber}) {$PrinterJobs{$printer} ++;}
 
        $UserPages{$user}+= $pages;
        if (not $Jobs{$jobsnumber}) {$UserJobs{$user} ++;}
 
$Jobs{$jobsnumber}++;
}
 
printf "%-15s %5s %8s\n", qw(User Jobs Pages);
foreach $user (sort keys %UserJobs) {
        printf "%-15s %5d %8d\n",
                $user, $UserJobs{$user},  $UserPages{$user};
}
 
print "\n";
printf "%-15s %5s %8s\n", qw(Printer Jobs Pages);
foreach $prn (sort keys %PrinterPages) {
        printf "%-15s %5d %8d\n",
                $prn, $PrinterJobs{$prn}, $PrinterPages{$prn};
}
Germanos
Posty: 11
Rejestracja: 27 maja 2010, 10:47

Post autor: Germanos »

Chciałbym się dopisać do tematu. Również jak kolega wyżej, proszę o pomoc w wyciągnięciu informacji z page_log.
Awatar użytkownika
Bastian
Member
Posty: 1424
Rejestracja: 30 marca 2008, 16:09
Lokalizacja: Poznañ

Post autor: Bastian »

A może być awk? Jeśli tak to postaram się coś napisać w wolnej chwili.

PS. Awk jest domyślnie w każdym dystrybucji więc przenośność zagwarantowana, a skrypt będzie częścią basha.
Germanos
Posty: 11
Rejestracja: 27 maja 2010, 10:47

Post autor: Germanos »

Pewnie, zawsze to jakiś krok do przodu :D z góry dzięki.
Nadal jednak gdyby ktoś mógł to przetłumaczyć na basha byłoby bardzo miło.
Awatar użytkownika
lessmian2
Member
Posty: 1088
Rejestracja: 30 kwietnia 2008, 19:38
Lokalizacja: Kraków

Post autor: lessmian2 »

Bastian pisze:a skrypt będzie częścią basha
Że jak częścią basha, bo nie rozumiem?

Co Wy się tak uparliście na tego basha, skoro często w innych językach daną rzecz można zrobić łatwiej, szybciej i przyjemniej, a tu już macie gotowe rozwiązanie.
Awatar użytkownika
Bastian
Member
Posty: 1424
Rejestracja: 30 marca 2008, 16:09
Lokalizacja: Poznañ

Post autor: Bastian »

skrypt.sh

Kod: Zaznacz cały

#!/bin/bash

awk ' skrypt' > plik_wynikowy
W tym sensie.

Dzisiaj może napiszę po robocie.

Wklej proszę Twojego page_log bo u mnie logowanie jest wyłączone i nie mam wzorca.
Germanos
Posty: 11
Rejestracja: 27 maja 2010, 10:47

Post autor: Germanos »

Może to pomoże:
http://www.cups.org/documentation.php/r ... -conf.html (oczywiście trzeba wyszukać ctrl+f "page_log") i jeszcze jeśli chodzi o przykład page_logu to: http://www.cups.org/documentation.php/d ... e_log.html

Dodane:
Wrzucam wycinek z page_log:

Kod: Zaznacz cały

Lexmark_C540n_Dyr root 1 [05/Nov/2010:19:21:40 +0100] 1 1 - localhost
Lexmark_C540n_Dyr root 1 [05/Nov/2010:19:23:51 +0100] 1 1 - localhost
Lexmark_E120N_P1BI root 2 [05/Nov/2010:19:50:03 +0100] 1 1 - localhost
Lexmark_E120N_P1BP root 3 [05/Nov/2010:19:50:09 +0100] 1 1 - localhost
Lexmark_X203n_P2P2 root 4 [05/Nov/2010:19:53:07 +0100] 1 1 - localhost
Może teraz komuś się uda.
Awatar użytkownika
Bastian
Member
Posty: 1424
Rejestracja: 30 marca 2008, 16:09
Lokalizacja: Poznañ

Post autor: Bastian »

Aj, przez przypadek znalazłem ten wątek. Zupełnie zapomniałem, że miałem coś napisać.

Kod: Zaznacz cały

#!/bin/bash

PL="page_log"
ML="moj_log"

awk '{if(jid[$2]){
  {if($3!= jid[$2]){
    jcount[$2]++; pages[$2]++; jid[$2] = $3
  }else {
    pages[$2]++; jid[$2]= $3 }}
}else {
  jid[$2] = $3
  jcount[$2]= 1
  pages[$2] = 1
}}
{if(pjid[$1]){
  {if($3!= pjid[$1]){
    pjcount[$1]++; ppages[$1]++; pjid[$1] = $3
  }else {
    ppages[$1]++; pjid[$1]= $3 }}
}else {
  pjid[$1] = $3
  pjcount[$1]= 1
  ppages[$1] = 1
}}
END{
{print "User Jobs Pages"}
 {for (u in jcount)
    print u" "jcount[u]" "pages[u]}
{print "-------------------------"}
{print "Printer Jobs Pages"}
 {for (p in pjcount)
    print p" "pjcount[p]" "ppages[p]}
}' ${PL} > ${ML}
Pamiętać o prawach do czytania i zapisu dla użytkownika co odpala ten skrypt. Miłego korzystania.
Germanos
Posty: 11
Rejestracja: 27 maja 2010, 10:47

Post autor: Germanos »

Także już zapomniałem, że prosiłem tutaj o pomoc w tej sprawie.
Dziękuję za pomoc.
ODPOWIEDZ