awk可以说是liunx中很重要的一个命令,是处理文本文件的一个神器,几乎所有的liunx中都会自带。
它会对文本文件进行一行一行的处理,特别适合格式相同文本,下面我们先了解一下它的语法,然后在弄一小段日志,看看它的具体用法。
命令
awk 动作 文件名
示例
awk '{print $0}' xxzhuti.logs
这个例子中 xxzhuti.logs 是要处理的文件文件,print 是打印的动作,$0代表一整行,需要将此命令,放在大括号中,并用引号,引起来。
当然有 $0 就会有 $1,$2, $3 依次代表的是第一个字段,第二个字段,第三个字段,在awk中默认是用空格和制表符,将字符串划分开来。若是使用了别的字符划分,如 竖线“|”,那么我们需要用 -F 规定一下划分的字符,如下。
awk -F "|" "{print $1}" xxzhuti.logs
变量
awk中的变量我们用的最多的也就是NF,NF代表的是有多少个字段。
awk "{print $NF}" 显示最后一个字段
$(NF-1) 显示倒数第二个字段。
awk常用的变量
FILENAME:当前文件名
FS:字段分隔符,默认是空格和制表符。
RS:行分隔符,用于分割每一行,默认是换行符。
OFS:输出字段的分隔符,用于打印时分隔字段,默认为空格。
ORS:输出记录的分隔符,用于打印时分隔记录,默认为换行符。
OFMT:数字输出的格式,默认为%.6g。
函数
awk中还内置了一些函数,方便我们对数据进行处理
awk "{ print toupper($1) }" xxzhuti.logs
awk常用函数
tolower():字符转为小写。
length():返回字符串长度。
substr():返回子字符串。
sin():正弦。
cos():余弦。
sqrt():平方根。
rand():随机数。
条件
awk " 条件 动作 " xxzhuti.logs
awk ' $1==200 {print $3} ' xxzhuti.logs
if语句
awk ' { if($1>200) print $3; else print "xxzhuti.com" }' xxzhuti.logs
记住最常用的,可以让工作效率事半功倍。