一个sh脚本(留作借鉴)
来源:互联网 发布:淘宝开店店名可以改吗 编辑:程序博客网 时间:2024/06/09 23:41
统计用户登录次数脚本
#! /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))
#! /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))
阅读全文
0 0
- 一个sh脚本(留作借鉴)
- 一个在线测试Html、脚本代码的网站,留作备份
- 一个能运行的sh脚本
- shell-001 撰写一个clearlog.sh脚本
- linux下sh脚本的一个小问题#!/bin/sh^M不是一个file的错误
- 下面是一个notify.sh脚本的简单示例
- 第一个sh脚本
- sh脚本使用整理
- sh 脚本格式
- orainstroot.sh 脚本
- sh脚本编码问题
- runcluvfy.sh 脚本使用
- sh脚本 语法
- 创建.sh脚本
- install_zj.sh脚本优化
- .sh脚本的相关内容
- linux crond 脚本.sh
- sh脚本语法
- 测试人员代码走查基础要点
- (一)java并发编程--计算机中的进程和线程(多进程和多线程)
- 二进制 字节 字符
- C++ 类声明 类前置声明
- 再谈Python多线程--正确的使用场景
- 一个sh脚本(留作借鉴)
- 如何阻止修改input里的值
- html-dom (scroll offset client)
- Hive分析函数之CUME_DIST、PERCENT_RANK学习
- Tensorflow实例:自编码器
- MVP简单实现OKHttp+recyclerview+springview
- IBM V7000存储Mdisk磁盘掉线数据恢复_服务器数据恢复
- 蓝桥杯 算法提高 7-1用宏求球的体积 ADV-221
- 线程生命周期