Advertisement
Naltharial

Untitled

Jun 13th, 2011
221
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 2.47 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. declare -A logins
  4. declare -A order
  5. declare -A sumtimes
  6.  
  7. ord=1
  8. lname=""
  9.  
  10. last -R | sort |
  11. egrep ^[a-z]+[[:space:]]+\(tty\)[0-9]+[^0-9]+[0-9]+[[:space:]]..:..[[:space:]]- > prijave.temp.bshshs
  12. exec < prijave.temp.bshshs
  13. while read line;
  14. do 
  15.     ms=$(echo $line | cut -d' ' -f4)
  16.     da=$(echo $line | cut -d' ' -f5)
  17.  
  18.     if [[ $ms == "Jan" ]]; then
  19.         mi=1
  20.     elif [[ $ms == "Feb" ]]; then
  21.         mi=2
  22.     elif [[ $ms == "Mar" ]]; then
  23.         mi=3
  24.     elif [[ $ms == "Apr" ]]; then
  25.         mi=4
  26.     elif [[ $ms == "May" ]]; then
  27.         mi=5
  28.     elif [[ $ms == "Jun" ]]; then
  29.         mi=6
  30.     elif [[ $ms == "Jul" ]]; then
  31.         mi=7
  32.     elif [[ $ms == "Aug" ]]; then
  33.         mi=8
  34.     elif [[ $ms == "Sep" ]]; then
  35.         mi=9
  36.     elif [[ $ms == "Oct" ]]; then
  37.         mi=10
  38.     elif [[ $ms == "Nov" ]]; then
  39.         mi=11
  40.     else
  41.         mi=12
  42.     fi
  43.    
  44.     if [[ $1 =~ ([0-9]+)[^0-9]([0-9]+) ]]
  45.     then
  46.         std=$((10#${BASH_REMATCH[1]}));
  47.         stm=$((10#${BASH_REMATCH[2]}));
  48.        
  49.         if [[ $2 =~ ([0-9]+)[^0-9]([0-9]+) ]]
  50.         then
  51.             end=$((10#${BASH_REMATCH[1]}));
  52.             enm=$((10#${BASH_REMATCH[2]}));
  53.         else
  54.             echo "Prosim vnesite datuma v enem izmed kompatibilnih formatov:  27.4. 6.5.; 14.04. 03.01; 15/01 5/6";
  55.         exit;
  56.         fi
  57.     else
  58.         echo "Prosim vnesite datuma v enem izmed kompatibilnih formatov:  27.4. 6.5.; 14.04. 03.01; 15/01 5/6";
  59.         exit;
  60.     fi
  61.    
  62.     if [[ $mi -gt $enm || $mi -lt $stm ]]; then
  63.         continue
  64.     elif [[ ($mi -eq $enm && $da -gt $end) || ($mi -eq $stm && $da -lt $std) ]]; then
  65.         continue
  66.     fi
  67.    
  68.     name=$( echo $line | cut -d' ' -f1 );
  69.     time=$( echo $line | cut -d' ' -f9 );
  70.  
  71.     if [[ $lname != $name ]]; then
  72.         order[$ord]=$name
  73.         (( ord++ ))
  74.     fi
  75.  
  76.     lname=$name
  77.  
  78.     if [[ ${logins[$name]} -gt 0 ]]; then
  79.         (( logins[$name]++ ))
  80.     else
  81.         logins[$name]=1
  82.     fi
  83.    
  84.     if [[ $time =~ \((([0-9]+)\+)+([0-9]+)[^0-9]([0-9]+)\) ]]
  85.     then
  86.         m=$(( 10#${BASH_REMATCH[2]}*60*24 + 10#${BASH_REMATCH[3]}*60 + 10#${BASH_REMATCH[4]} ));
  87.     else
  88.         h=$( echo ${time:1:5} | cut -d':' -f1 );
  89.         h=$(( h = 10#$h*60 ))
  90.         m=$( echo ${time:1:5} | cut -d':' -f2 );
  91.    
  92.         m=$(( 10#$h + 10#$m ))
  93.     fi
  94.  
  95.     if [[ ${sumtimes[$name]} -gt 0 ]]; then
  96.         (( sumtimes[$name] += $m ))
  97.     else
  98.         sumtimes[$name]=$m
  99.     fi
  100. done
  101. rm prijave.temp.bshshs
  102. (( ord-- ))
  103. for i in $(seq 1 $ord)
  104. do
  105.     name=${order[$i]}
  106.    
  107.     m=${sumtimes[$name]}
  108.     d=$(( $m/24/60 ))
  109.     m=$(( $m-$d*24*60 ))
  110.     h=$(( $m/60 ))
  111.     m=$(( $m-$h*60 ))
  112.  
  113.     if [[ $d -eq 1 ]]; then
  114.         days="dan"
  115.     elif [[ $d -eq 2 ]]; then
  116.         days="dneva"
  117.     else
  118.         days="dni"
  119.     fi
  120.    
  121.     echo "$name ${logins[$name]}x $d $days $h:$m"
  122. done
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement