修改命令的输出"last"



我想在bash中制作一个程序,用以下格式显示last的输出:

username | number of sessions | duration of sessions | maximum session length

我已经做了前两个专栏,但不知道如何做剩下的。这是我为用户名和会话数写的代码:

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_lengthn"
done

问候!

我假设最后一次输出与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列包含会话持续时间:(HH:MM(或(DAYS+HH:MM。小型awk将起作用。仅脚本计数终止的会话-忽略崩溃/仍在运行的会话。

Total是会话时间(分钟(。

#! /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]
} ;
}

最新更新