一个sh脚本(留作借鉴)

统计用户登录次数脚本
#! /bin/bash
# 原目录路径
target_dir="/home/users/wood/logdata"
# 所有的日志打印到一个文件中
newlog_dir="/home/users/wood/test_log/newlog"
# 时间戳转换为日期后的文件
timestamp_log="/home/users/wood/test_log/timestamp_log"
# 排序去重后的文件
unique_log="/home/users/wood/test_log/unique_log"
# 最终user_id登录的次数文件
user_login_count="/home/users/wood/test_log/user_login_count"
# 生成的SQL文件
user_login_sql="/home/users/wood/test_log/user_login_sql.sql"
# 获取所有的文件
function read_dir(){
for file in `ls $1`
do
if [ -d $1"/"$file ]
then
read_dir $1"/"$file
else
if [ -f $newlog_dir ]
then
cat $1"/"$file >> $newlog_dir
else
cat $1"/"$file >> $newlog_dir
chmod +x $newlog_dir
fi
fi
done
return 0
}
start=$(date +%s)
read_dir $target_dir
#时间戳转换为日期
awk '{$1=strftime("%Y-%m-%d",$1)}1' $newlog_dir 1>$timestamp_log
chmod 775 $timestamp_log
#排序去重
cat $timestamp_log | sort -k 1,2 -u >$unique_log
chmod 775 $unique_log
#计算user_id出现的次数
这里需要注意 awk for语法是 for(key in array) 即 for(下标 in 数组)
awk '{a[$2]++}END{for (j in a) print $1=j,$2=a[j]}' $unique_log>$user_login_count
chmod 775 $user_login_count
# 生成sql文件
echo "SET NAMES utf8;" >> $user_login_sql
awk '{point=$2*5}{print "INSERT INTO user VALUES('\'\'',"$1","point",0,'\'\'','\'\'',0,0,"point",0,0,'\'\'','\'\'') ON DUPLICATE KEY UPDATE exp_points=exp_points+"point",daily_exp_points=daily_exp_points+"point";"}' $user_login_count >> $user_login_sql
end=$(date +%s)
echo $(($end-$start))


生成用户最新20条登录记录脚本


#! /bin/bash
start=$(date +%s)
# 排序去重后的文件
unique_log="/home/users/wood/test_log/unique_log"
# 去重后的时间转为时间戳文件
unique_timestamp_log="/home/users/wood/test_log/unique_timestamp_log"
# 保存用户最新的20条登录记录
top20_user_login_log="/home/users/wood/test_log/top20_user_login_log"
# 生成sql文件
top20_user_log_sql="/home/users/wood/test_log/top20_user_login_log.sql"
# 日期再次转换为时间戳
awk '{s=gensub(/-/," ","G",$1);s=s" 00 00 00";print mktime(s),$2}' $unique_log>$unique_timestamp_log
# 只保留每个用户的最新的前20条记录
awk '{d[$2,++a[$2]%20]=$0}END{t=asort(d);for(n=t;n>0;--n)print d[n]}' $unique_timestamp_log>$top20_user_login_log
chmod 775 $top20_user_login_log
# 生成SQL文件
echo "SET NAMES utf8;" >> $top20_user_log_sql


end=$(date +%s)
echo $(($end-$start))

你可能感兴趣的:(一个sh脚本(留作借鉴))