对于运维或者开发人员来源,对于日志的统计和搜索是必会的技能,甚至在面试的时候是必问的问题,对此,做一下总结。
一、常用到的命令
1、cat
2、awk
具体见
一、语法形式
awk [options] 'script' var=value file(s)
awk [options] -f scriptfile var=value file(s)
常用命令选项
-F fsfs指定输入分隔符,fs可以是字符串或正则表达式,如-F:
-v var=value赋值一个用户定义变量,将外部变量传递给awk
-f scripfile从脚本文件中读取awk命令
-m[fr] val对val值设置内在限制,-mf选项限制分配给val的最大块数目;-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。
二、awk内置变量(预定义变量)
说明:[A][N][P][G]表示第一个支持变量的工具,[A]=awk、[N]=nawk、[P]=POSIXawk、[G]=gawk
$n 当前记录的第n个字段,比如n为1表示第一个字段,n为2表示第二个字段。
$0 这个变量包含执行过程中当前行的文本内容。
[N] ARGC 命令行参数的数目。
[G] ARGIND 命令行中当前文件的位置(从0开始算)。
[N] ARGV 包含命令行参数的数组。
[G] CONVFMT 数字转换格式(默认值为%.6g)。
[P] ENVIRON 环境变量关联数组。
[N] ERRNO 最后一个系统错误的描述。
[G] FIELDWIDTHS 字段宽度列表(用空格键分隔)。
[A] FILENAME 当前输入文件的名。
[P] FNR 同NR,但相对于当前文件。
[A] FS 字段分隔符(默认是任何空格)。
[G] IGNORECASE 如果为真,则进行忽略大小写的匹配。
[A] NF 表示字段数,在执行过程中对应于当前的字段数。
[A] NR 表示记录数,在执行过程中对应于当前的行号。
[A] OFMT 数字的输出格式(默认值是%.6g)。
[A] OFS 输出字段分隔符(默认值是一个空格)。
[A] ORS 输出记录分隔符(默认值是一个换行符)。
[A] RS 记录分隔符(默认是一个换行符)。
[N] RSTART 由match函数所匹配的字符串的第一个位置。
[N] RLENGTH 由match函数所匹配的字符串的长度。
[N] SUBSEP 数组下标分隔符(默认值是34)。
打印每一行的第二和第三个字段:
awk '{ print $2,$3 }' filename
统计文件中的行数:
awk 'END{ print NR }’ filename
三、awk的工作原理
②awk 'begin{ print "start" } pattern{ commands } end{ print "end" }' file(s)。awk 'begin{ print "start" } pattern{ commands } end{ print "end" }' file(s)。awk 'begin {print "begin: " var} {print "process: " var} end {print "end: " var }' a var=1 。
第一步:执行BEGIN{ commands }语句块中的语句;
第二步:从文件或标准输入(stdin)读取一行,然后执行pattern{ commands }语句块,它逐行扫描文件,从第一行到最后一行重复这个过程linux命令,直到文件全部被读取完毕。