[英]Modify the output of the command “last”
我想在 bash 中編寫一個程序,以這種格式顯示最后的 output:
username | number of sessions | duration of sessions | maximum session length
我已經完成了前兩列,但不知道如何執行 rest。 這是我為用戶名和會話數編寫的代碼:
last |& tee last.txt
cut -d' ' -f1,2 last.txt > last1.txt
謝謝
你可以試試這樣的東西。 它並不完美但非常接近:
#!/bin/bash
unique_users="$( last | awk ' {print $1} ' | sort | uniq | grep -v 'shutdown\|wtmp\|reboot' | awk 'NF' )"
for user in $unique_users
do
number_of_sessions="$( last $user | awk '{print $NF}' | grep '^(' | tr -d '()' | wc -l )"
total_mins="$( last $user | awk '{print $NF}' | grep '^(' | tr -d '()' | awk '{ split($1, t, ":"); print (t[1]*60+t[2]) }' | awk '{ sum+=$1}END{print sum/60}' )"
max_length="$( last $user | awk '{print $NF}' | grep '^(' | tr -d '()' | awk '{ split($1, t, ":"); print (t[1]*60+t[2]) }' | sort -rn | head -1 | awk '{ sum+=$1}END{print sum/60}')"
printf "$user | $number_of_sessions | $total_mins | $max_length\n"
done
問候!
我假設最后一個 output 與 Mint19 相同
owner tty7 :0 Sun Nov 17 06:18 gone - no logout
owner tty7 :0 Sun Nov 10 11:13 - crash (6+18:34)
owner tty7 :0 Thu Nov 7 14:10 - 11:11 (2+21:00)
owner pts/1 :0 Wed Nov 6 21:48 - 21:48 (00:00)
owner pts/1 :0 Wed Nov 6 21:37 - 21:40 (00:03)
該文件按時間戳排序,第 10 列包含 session 持續時間:(HH:MM) 或 (DAYS+HH:MM)。 小型awk
可以解決問題。 腳本只計算終止的 session - 忽略崩潰/仍在運行的會話。
總時間為 session 時間(以分鍾為單位)。
#! /usr/bin/awk -f
{
id=$1
if ( match($10, /\(([0-9]+)\+\)?([0-9][0-9]):([0-9][0-9])/, a) ) {
dur_min = a[1]*24*60 + a[3] * 60 + a[4] ;
s_count[id]++ ;
s_total[id] += dur_min
if ( dur_min > s_max[id] ) s_max[id] = dur_min
}
}
END {
print "ID", "Count", "Total(min)", "Max(min)"
for (id in s_count) {
print id, s_count[id], s_total[id], s_max[id]
} ;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.