由浅入深shell脚本训练
最近一直在学习Shell,以前一直觉得Shell语法很难,不好学,现在总算有一些收获了。其实Shell脚本就是一堆linux命令的集合,把脚本里每一步的命令搞懂是什么意思,然后整个脚本的意思就搞出来了;同样要通过脚本完成一项工作,就把这项工作分解成若干的小命令,然后把小命令集合起来就可以了。至于什么awk、sed、正则,都要靠自己平常的积累。
①查询一个服务某天的请求次数:
|
1
2
|
cat renren-1.log|grep "MSG without parse">tempawk '{a[$1]++}END{for(i in a)print i,a[i]}' temp |
②第一列相同,第二列相加:
|
1
|
awk '{a[$1]+=$2}END{for(m in a)print m,a[m]}' |
③查询包含log字符的文件名称:
|
1
|
find . -name "*.log*" -type f | xargs ls -l |
④查询批量服务某一天请求次数:
|
1
2
3
4
5
6
7
8
|
#!/bin/bash#查询批量服务某一天请求次数find . -name "*log*" -type f | xargs ls -l > logs_llawk '{print $8}' logs_ll > logscat logs | while read linedo echo $line echo 2013-08-01 cat $line | egrep ">>>|MSG without parse" | grep "2013-08-01" |wc -ldone |
⑤查询批量服务某一天请求次数,过滤掉请求次数为0的请求:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
#!/bin/bash#查询批量服务某一天请求次数,过滤掉请求次数为0的请求find . -name "*log*" -type f | xargs ls -l > logs_llawk '{print $8}' logs_ll > logscat logs | while read lineCOUNT=`cat $line | egrep ">>> |MSG without parse" | grep "2013-07-02" | wc -l`do if [ $COUNT -ne 0 ]; then echo $line 2013-07-02 echo $COUNT else echo $line >/dev/null fidone |
⑥查询批量服务某个月请求次数,过滤掉请求次数为0的请求:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
#!/bin/bash#查询批量服务某个月请求次数,过滤掉请求次数为0的请求find . -name "*log*" -type f | xargs ls -l > logs_llawk '{print $8}' logs_ll > logsfor day in `seq 30`do cat logs | while read line COUNT=`cat $line | egrep ">>> |MSG without parse" | grep "2013-08-$day" | wc -l` do if [ $COUNT -ne 0 ]; then echo $line 2013-08-$day echo $COUNT else echo $line >/dev/null fi donedone |
⑦统计输出一个服务在某段时间的请求次数和对应的日期:
|
1
2
|
cat $line | egrep ">>> |MSG without parse" |awk '{print $1}' >>log.tmpcat log.tmp |sort |uniq -c |
⑧查询批量服务在所有日期的请求次数,并过滤掉请求次数为0的请求,输出服务名、日期和对应的请求次数:
|
1
2
3
4
5
6
7
8
9
10
11
|
#!/bin/bash#查询批量服务在所有日期的请求次数,并过滤掉请求次数为0的请求,输出服务名、日期和对应的请求次数find . -name "*log*" -type f | xargs ls -l > logs_llawk '{print $6,$8}' logs_ll > logsawk '{print $2}' logs>logcat log | while read linedo cat $line | egrep ">>> |MSG without parse" | awk '{print $1}' > $line.tmp echo $line cat $line.tmp |sort | uniq -cdone |
标签: Shell、linux
浙公网安备 33010602011771号