我从同伴那里得到了解决我问题的方法。这是代码。
last | awk '{
if(NF>7){
if($(NF-5)=="Mar"){ # You may change the month or even accept it as a parameter
if($(NF-4) != date){datecount++};
match($(NF-3),/^([0-9]+)/,arr);
if(arr[1]>=8 && arr[1]<=16){
# Note I am using different time interval, change it accordingly
count++;
}
}
date=$(NF-4);
}
}
END{
datecount++;
print "Total logins : ",count;
print "Total dates : ",datecount;
print "Average logins : ",count/datecount;
}'
我尝试将其保存为name.sh并使用bash name.sh运行,我尝试将其保存为name.awk并以awk -f name.awk运行,但是我仍然遇到相同的错误:
awk: 1: unexpected character '.'
我不完全确定自己是否应按要求运行脚本。
注意:我正在ubuntu 18.04上的虚拟机上工作(我认为),并且正在尝试通过终端运行脚本。
答案 0 :(得分:1)
似乎您有}
和{
大括号来解决问题:)始终尝试以良好的方式缩进代码,以使您轻松了解条件的起始和结束位置。您能不能试一下。
last | awk '{
if(NF>7){
if($(NF-5)=="Mar"){
if($(NF-4) != date){datecount++};
match($(NF-3),/^([0-9]+)/,arr);
if(arr[1]>=8 && arr[1]<=16){
count++;
}
date=$(NF-4);
}
}
}
END{
datecount++;
print "Total logins : ",count;
print "Total dates : ",datecount;
print "Average logins : ",count/datecount;
}'