Strona 1 z 1

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

: 14 kwietnia 2010, 14:18
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};
}

: 14 lipca 2010, 19:02
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.

: 15 lipca 2010, 16:19
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.

: 15 lipca 2010, 16:21
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.

: 16 lipca 2010, 08:32
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.

: 16 lipca 2010, 21:38
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.

: 06 listopada 2010, 14:47
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.

: 18 stycznia 2011, 23:29
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.

: 19 stycznia 2011, 17:40
autor: Germanos
Także już zapomniałem, że prosiłem tutaj o pomoc w tej sprawie.
Dziękuję za pomoc.