一、内置变量表
属性 | 说明 |
$0 | 当前记录(作为单个变量) |
$1~$n | 当前记录的第n个字段,字段间由FS分隔 |
FS | 输入字段分隔符 默认是空格 |
NF | 当前记录中的字段个数,就是有多少列 |
NR | 已经读出的记录数,就是行号,从1开始 |
RS | 输入的记录他隔符默 认为换行符 |
OFS | 输出字段分隔符 默认也是空格 |
ORS | 输出的记录分隔符,默认为换行符 |
ARGC | 命令行参数个数 |
ARGV | 命令行参数数组 |
FILENAME | 当前输入文件的名字 |
IGNORECASE | 如果为真,则进行忽略大小写的匹配 |
ARGIND | 当前被处理文件的ARGV标志符 |
CONVFMT | 数字转换格式 %.6g |
ENVIRON | UNIX环境变量 |
ERRNO | UNIX系统错误消息 |
FIELDWIDTHS | 输入字段宽度的空白分隔字符串 |
FNR | 当前记录数 |
OFMT | 数字的输出格式 %.6g |
RSTART | 被匹配函数匹配的字符串首 |
RLENGTH | 被匹配函数匹配的字符串长度 |
SUBSEP | \034 |
/^hao/ 为选择表达式,$0代表是逐行显示匹配表达式的行信息
wodezuiaishinagerendeMacBook-Pro:~ wodezuiaishinageren$ awk '/^hao/{print $0}' ~/Desktop/tomcat.log
hao你好
hao你猜
设置字段分隔符号(FS使用方法)
wodezuiaishinagerendeMacBook-Pro:~ wodezuiaishinageren$ awk 'BEGIN {FS="hao"}/^hao/{print $1,$NF}' ~/Desktop/tomcat.log
你好
你猜
FS为字段分隔符,可以自己设置,默认是空格,因为在文本里面是”写了hao”,所以用此分隔,如果文件里与自定义的分隔符是一样的,则需要修改默认分隔符。NF是字段总数,$0代表当前行记录,$1-$n是当前行,各个字段对应值。
记录条数(NR,FNR使用方法)NR得到当前记录所在行
wodezuiaishinagerendeMacBook-Pro:~ wodezuiaishinageren$ awk 'BEGIN {FS="hao"}{print NR,$1,$NF}' ~/Desktop/tomcat.log
1 你好
2 no他也好
3 yes大家好
4 你猜
设置输出字段分隔符(OFS使用方法) 从指定分隔符的位置开始
wodezuiaishinagerendeMacBook-Pro:~ wodezuiaishinageren$ awk 'BEGIN {FS="hao";OFS="->"}{print FNR, $1,$NF}' ~/Desktop/tomcat.log
->->你好
->->no他也好
->->yes大家好
->->你猜
wodezuiaishinagerendeMacBook-Pro:~ wodezuiaishinageren$ awk 'BEGIN {FS=":";OFS="->"}{print FNR, $1,$NF}' ~/Desktop/tomcat.log
->hao你好->hao你好
->haono他也好->haono他也好
->haoyes大家好->haoyes大家好
->hao你猜->hao你猜
设置输出行记录分隔符(ORS使用方法)列转为行纪录
wodezuiaishinagerendeMacBook-Pro:~ wodezuiaishinageren$ awk 'BEGIN {FS=":";ORS="->"}{print FNR, $1,$NF}' ~/Desktop/tomcat.log
1 hao你好 hao你好->2 haono他也好 haono他也好->3 haoyes大家好 haoyes大家好->4 hao你猜 hao你猜->wodezuiaishinagerendeMacBook-Pro:~ wodezuiaishinageren$
输入参数获取(ARGC ,ARGV使用)ARGC得到所有输入参数个数,ARGV获得输入参数内容,是一个数组。
wodezuiaishinagerendeMacBook-Pro:~ wodezuiaishinageren$ awk 'BEGIN{FS=":";print "ARGC="ARGC;for(k in ARGV) {print k"="ARGV[k]; }}' ~/Desktop/tomcat.log
ARGC=2
0=awk
1=/Users/wodezuiaishinageren/Desktop/tomcat.log
获得传入的文件名(FILENAME使用)
#awk 'BEGIN{FS=":";print FILENAME}{print FILENAME}' #~/Desktop/tomcat.log
awk 'BEGIN{print FILENAME}{print FILENAME}' ~/Desktop/tomcat.log
获得linux环境变量(ENVIRON使用)
wodezuiaishinagerendeMacBook-Pro:~ wodezuiaishinageren$ bash Desktop/shell/awk_en.sh
/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/Cellar/maven/3.3.3/libexec/bin:/usr/local/bin:/bin
OFMT格式化数字 四舍五入:
awk 'BEGIN{OFMT="%.3F";print 2/3,1.2345678;}'
wodezuiaishinagerendeMacBook-Pro:~ wodezuiaishinageren$ bash Desktop/shell/awk_ofmt.sh
0.667 1.235
获取外部参数:
语法 awk ‘{action}’ 变量名=“$变量名"
test='测试'
echo | awk '{print test}' test="$test"
wodezuiaishinagerendeMacBook-Pro:~ wodezuiaishinageren$ bash Desktop/shell/awk_get_paramter.sh
测试
运算符操作
运算符 | 描述 |
赋值运算符 | |
= += -= *= /= %= ^= **= | 赋值语句 |
逻辑运算符 | |
|| | 逻辑或 |
&& | 逻辑与 |
正则运算符 | |
~ ~! | 匹配正则表达式和不匹配正则表达式 |
关系运算符 | |
< <= > >= != == | 关系运算符 |
算术运算符 | |
+ - | 加,减 |
* / & | 乘,除与求余 |
+ - ! | 一元加,减和逻辑非 |
^ *** | 求幂 |
++ -- | 增加或减少,作为前缀或后缀 |
其它运算符 | |
$ | 字段引用 |
空格 | 字符串连接符 |
?: | C条件表达式 |
in | 数组中是否存在某键值 |