我有一个日志文件,如下所示:
11:34:17 PM CPU %user %nice %system %iowait %steal %idle
11:39:17 PM all 0.09 0.00 0.07 0.09 0.00 99.75
11:44:17 PM all 0.04 0.00 0.03 0.00 0.00 99.92
11:49:17 PM all 1.49 0.00 0.49 0.06 0.00 97.96
11:54:17 PM all 23.27 0.00 0.51 0.05 0.03 76.14
Average ....我需要将日期、时间、%用户、%system、%idle插入到表中
row_id (int) | date (date) | time (time) | hostname (varchar) | user (decimal) | system (decimal) | idle (decimal)我需要将时间转换为hh:mm:ii (24小时)。date列需要派生自名为YYYY-MM-DD_hostname_cpu.log的日志文件
我如何在shell脚本中做到这一点?我需要帮助转换时间和抓取主机名,这可以是从1到20的任何长度。
#: awk 'BEGIN { OFS = "," } FNR == 1 { d = substr(FILENAME, 1, 10) } $2 ~ /^[AP]M$/ && $3 != "CPU" { print d, $1 " " $2, $4+$5, $6, $7+$8+$9 }' *_cpu.log >> new_file.log发布于 2015-08-16 18:20:32
我可以给你一种伪代码:
考虑到YYYY-MM-DD_hostname_cpu.log有多个文件。
# Loop over each file
for inputfile in `ls *.log`; do
# grab date from filename
date=echo $0 | awk -F"_" '{print $0}'
# read line by line from file into variables
cat $inputfile | while read time user system idle; do
# Generate insert statements & pipe them to mysql.
echo "insert into TABLE values (null, '$date', '$time', '$user', '$system', '$idle');"
done | mysql -uUSER -pPASS database;
done;通常,为了批量加载这样的文件,我们可以使用MySQL的Load Data Infile语法,您可能希望复习几个use cases。
https://stackoverflow.com/questions/32031992
复制相似问题