转日常工作中用到的SHELL/PYTHON命令

上一篇 / 下一篇  2013-06-25 10:57:08 / 个人分类:python

日常工作中用到的SHELL/PYTHON命令——文本篇

作为一名RD,作为一名后端RD,每天大部分的工作都是在终端上面完成的,除了在vim上面编写代码,也需要分析日志、数据,定时跑一些任务,因此各种shell、各种脚本语言也是不少用。罗列些自己平时工作中用到查看、处理文本的命令:

查看日志

平常查看模块打印的日志,肯定是必需的,比如需要知道一个模块重启后运行是否正常,需要查看请求返回的一些字段。日志比较小的话(100Mb以内),可以直接用vim打开,否则会把服务器内存全部吃掉,甚至把服务器搞挂。。。

文件太大的话,可以用less或者more命令打开,这样不会把整个文件都load到内存,然后再使用“/”或者”?”向后或者向前查找需要的字符串

有时只需要看看文件的头尾几行,看看日志的格式如何,用head以及tail就可以,特别,如果需要实时查看日志,则可以使用tail -f

过滤日志

有时只需要获取日志的某些行,比如查找哪些行包含”FATAL”,就可以用

grep "FATAL" xxx.log

如果先是想看看有没有这类日志存在,就用管道结合wc -l

grep "FATAL" xxx.log | wc -l

也可以结合之前的lessheadtail查看部分日志

grep "FATAL" xxx.log | less

如果是想获取日志中的某些字段,可以使用cut命令进行分割

假设有如下日志:

1 2 3 4 5

11 12 13 14 15

获取第三列,用cat xxx.log | cut -d'\t' -f3,就可以得到

3

13

有时候,日志比较复杂,比如:

a=1,b=2,c=3

比如还是获取第三列,则可以:

cat xxx.log | cut -d',' -f3 | cut -d'=' -f2

过滤日志,也可以使用awk,但感觉如何不是对于日志的数据进行计算,只用awk进行过滤,未免有些大材小用了,呵呵。

计算日志字段

好,这个时候awk就可以排上用场了,它不但能对字段进行过滤、累加、对日志按类似C语言printf()的格式进行输出,还可以进行dict运算。比如有一份日志保存着每次请求的query字段:

htc

iphone4s

htc

sumsung

xiaomi

我需要知道每个query的频次,用几行python应该也能很快搞定,不过用awk,仅需用一行:

1
catxxx.log |awk'{dict[$1]++;} END{for(i in dict){printf "query:[%s] pv:[%d]\n", i, dict[i];}}'

query:[xiaomi] pv:[1]

query:[sumsung] pv:[1]

query:[htc] pv:[2]

query:[iphone4s] pv:[1]

遍历文件

有时候需要依次对一些文件进行相同的处理,如果只是想遍历文件一个文件夹下面的某些文件,可以直接

1
forfilein./*.log;doecho"$file";done

./zhixin_stat.log
./zhixin_stat.py.log

有时候需要构造一些序列,一般情况,用类似C语言的for循环,比如:

1
for((i=0; i<=10; i++));doecho201304$i;done

2013040
2013041
2013042
2013043
2013044
2013045
2013046
2013047
2013048
2013049
20130410

但是可以发现,生成的序列宽度是不一样的,就需要用到seq命令了,它可能生成固定宽度的序列:

1
foriin`seq-w 1 10`;doecho

TAG:

 

评分:0

我来说两句