如何快速截取某段时间内的日志
在排除故障时,需要分析发生故障的原因,避免再次出现同样的问题,需要对日志进行分析,截取故障前后时间段的日志。之前是用正则表达式来获取某段时间的内的日志,需要单独编写/修改脚本。然后刚才看到ttlsa.com博客里面说的一种awk方法,实际测试可行:
这里以截取nginx访问日志为例:查看09/Aug/2014:00:01:12到09/Aug/2014:00:03:30时间段内ixyzero.com的访问日志。
# awk '$4 >="[09/Aug/2014:00:01:12" && $4 <="[09/Aug/2014:00:03:30"' access.log
之前我还真没想到awk竟然可以这么用来比较时间大小,学习了。
参考地址:http://www.ttlsa.com/linux/how-to-quickly-intercept-logs-over-time/
打印文件的第一列(域): awk ‘{print $1}’ filename
打印文件的前两列(域): awk ‘{print $1,$2}’ filename
打印文本文件的总行数: awk ‘END{print NR}’ filename #END必不可少,否则从1开始打印
如果想要把某一文件的总行数赋值给变量nlines,可以表达为:
1) nlines=`(awk ‘END{print NR}’ filename)`
或者
2) nlines=$(awk ‘END{print NR}’ filename)
让awk打印除第一列外的所有列怎么写?
方法一:
awk ‘{for(iCnt=2;iCnt<=NF;iCnt++)print $iCnt}’ urfile
方法二:
awk ‘{$1=””;print $0}’ filename
awk合并文件问题
我有2个文件 tmp1.txt 和 tmp2.txt
tmp1.txt
20
18
19
tmp2.txt
15
14
13
我想做个文件tmp3.txt做成
20 15
18 14
19 13
就是把tmp1.txt和tmp2.txt按列合并。
方法一:
使用paste命令:paste tmp1.txt tmp2.txt >tmp3.txt
方法二:
awk 'NR==FNR{a[NR]=$1;count=NR} NR>FNR{b[NR-count]=$1} END{for(i=1;i<=count;i++)print a[i],b[i]}' tmp1.txt tmp2.txt | tee tmp3.txt
方法三:
awk 'NR==FNR{a[NR]=$0} NR>FNR{print a[FNR],$0}' tmp1.txt tmp2.txt | tee tmp3.txt
说明:其中的很多技巧都是从ChinaUnix上收集而来,CU上面的大牛太多了,而且乐于助人,赞一个。
学习awk的blog地址,随时记下来备忘:
- http://www.cnblogs.com/chengmo/archive/2013/01/17/2865479.html
- http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html
之前在看0ops的题目时,有一道题是:
[题]截止到2014.2.23,亚太互联网络信息中心分配给中国大陆的IPv4地址是多少个?
[解]解决方法是:下载文件http://ftp.apnic.net/stats/apnic/2014/delegated-apnic-20140223.gz进行统计分析。文件格式为:
apnic|CN|ipv4|1.2.2.0|256|20110331|assigned
等级机构|获得该IP段的国家/组织|资源类型|起始IP|IP段长度|分配日期|分配状态
我当时是用PHP去进行正则匹配然后求和得到330393088,不过后来群里面给出了一个awk的解法,觉得不错,就收集了起来:
wget ftp://ftp.apnic.net/public/apnic/stats/apnic/2014/delegated-apnic-20140223.gz gzip -d delegated-apnic-20140223.gz cat delegated-apnic-20140223|grep "|CN|"|grep "ipv4" > ipv4.1.txt awk -F "|" '{print $5}' ipv4.1.txt>ipv4.2.txt awk '{sum+=$1;i++} END{print sum}' ipv4.2.txt
上面用到了grep/awk,而且最后直接就用的是awk进行的求值,值得注意。
还有一个类似的技巧:实时查询中国有多少个 IP
这个数字你可以从 APNIC 取得,并计算出来:
wget http://ftp.apnic.net/stats/apnic/delegated-apnic-latest
(cat delegated-apnic-latest | grep -i ‘CN|ipv4′ | cut -f 5 -d’|’ | tr ‘n’ ‘+’; echo 0) | bc
一些学习awk的资源:
- 利用 AWK 的数值计算功能提升工作效率 http://www.ibm.com/developerworks/cn/linux/l-cn-awkinwork/index.html
- 通用线程: awk 实例, 第1部分 http://www.ibm.com/developerworks/cn/linux/shell/awk/awk-1/index.html
- 通用线程: awk 实例, 第2部分 http://www.ibm.com/developerworks/cn/linux/shell/awk/awk-2/index.html
- 通用线程: awk 实例, 第3部分 http://www.ibm.com/developerworks/cn/linux/shell/awk/awk-3/index.html
- 一些很有用的 awk 源码 http://dada.perl.it/shootout/gawk_allsrc.html
- Linux 系统中几种很用的文本处理工具: http://www-128.ibm.com/developerworks/linux/library/l-textutils.html
- Awk 命令学习总结、AWk命令系列学习(linux shell)
《“Awk的一些技巧总结[不定期更新]”》 有 1 条评论
[…] Awk的一些技巧总结[不定期更新] […]