在项目中需要写shell从日志文件中获取访问记录,用到了awk数据处理工具。特做一下中结。
awk处理每行数据的时候默认是采用空格或者tab隔开的,将每行数据拆分为每一列。每一列都有默认的标示,
1
2…..其中
0标示一整行。还有几个比较常用到的内置变量如下,在使用的时候不需要使用
符号。
NF 每一行的列数
NR 当前处理的第几行
定义分隔的时候,需要加BEGIN,不然的话会从第二行开始进行分隔。
测试数据
1 张三 语文 80
2 李四 数学 65
3 王五 英语 70
4 张三 数学 39
5 李四 语文 12
6 王五 语文 13
7 张三 英语 39
8 李四 英语 89
9 王五 数学 11
案例一:输出test.txt文件中用空格分隔,第一列数字大于3的行。
cat test.txt | awk 'BEGIN {FS=" "} $1>3 {print $1 "\t" $2 "\tline:"NR}'
4 张三 line:4
5 李四 line:5
6 王五 line:6
7 张三 line:7
8 李四 line:8
9 王五 line:9
案例二:求最后一列的平均数:
cat test.txt | awk 'BEGIN {FS=" "} {total=total+$NF} END {print total/NR}'
46.4444
记住要在NF前加$,不然的话标示的该行的列数。
参考:
http://www.mamicode.com/info-detail-1187091.html
http://awk.readthedocs.io/en/latest/chapter-one.html
http://linux.51yip.com/search/awk