AWK简单总结
awk是linux/unix下的一个强大编程工具,他支持用户自定义函数和动态正则表达式,灵活性强,运行速度快。
常用命令选项
1、-F fs:fs指定输入分隔符,fs可以是字符串或正则表达式。
2、-v var=value:赋值一个用户定义变量,将外部变量传递给awk。
3、-f scripfile:从脚本文件中读取awk命令。
变量
内置变量
1、FS :输入字段分隔符,默认为空白字符
awk -v FS=“:” ‘{print $1}’ /etc/passwd #以冒号为分隔符,打印第一列
2、OFS :输出字段分隔符,默认为空白字符
awk -v FS=‘:’ -v OFS=‘|’ ‘{print $1,$2}’ /etc/passwd
3、RS :输入记录分隔符,指定输入时的换行符,原换行符仍有效
awk -v RS=“:” ‘{print $1,$2}’ /etc/passwd 以冒号为节点进行换行打印
4、ORS :输出记录分隔符,输出时用指定符号代替换行符
awk -v FS=‘:’ -v ORS=‘|’ ‘{print $1,$2}’ /etc/passwd
5、NF :字段数量,
N
F
引用最后一列,
NF引用最后一列,
NF引用最后一列,(NF-1)引用倒数第2列
[root@www ~]# awk -v FS=“:” ‘{print
1
,
1,
1,(NF-1),$NF}’ /etc/passwd
6、NR :行号,后可跟多个文件,第二个文件行号继续从第一个文件最后行号开始
[root@www ~]# awk -v FS=‘:’ ‘{print $1,NR}’ /etc/passwd | head -n 5
7、FNR :各文件分别计数, 行号,后跟一个文件和NR一样,跟多个文件,第二个文件行号从1开始
awk -v FS=‘:’ ‘{print $1,FNR}’ cdx.file /etc/passwd| head -n 5
自定义变量
自定义变量( 区分字符大小写)
1、-v var=value
先定义变量,后执行动作print
[root@www ~]# awk -v name="tang" -F: '{print name":"$0}' /etc/passwd | head -n 5
tang:root:x:0:0:root:/root:/bin/bash
tang:bin:x:1:1:bin:/bin:/sbin/nologin
tang:daemon:x:2:2:daemon:/sbin:/sbin/nologin
tang:adm:x:3:4:adm:/var/adm:/sbin/nologin
tang:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
在执行动作print后定义变量
[root@www ~]# awk -F: '{print name":"$0;name="tang"}' /etc/passwd | head -n 5
:root:x:0:0:root:/root:/bin/bash
tang:bin:x:1:1:bin:/bin:/sbin/nologin
tang:daemon:x:2:2:daemon:/sbin:/sbin/nologin
tang:adm:x:3:4:adm:/var/adm:/sbin/nologin
tang:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
2、在program 中直接定义
可以把执行的动作放在脚本中,直接调用脚本 -f
[root@www ~]# cat 1.txt
{name="tang";print name,$1}
[root@www ~]# awk -f 1.txt /etc/passwd | head -n 5
tang root:x:0:0:root:/root:/bin/bash
tang bin:x:1:1:bin:/bin:/sbin/nologin
tang daemon:x:2:2:daemon:/sbin:/sbin/nologin
tang adm:x:3:4:adm:/var/adm:/sbin/nologin
tang lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
Printf命令
格式
格式化输出
printf` `"FORMAT"``, item1,item2, ...
1、必须指定FORMAT
2、不会自动换行,需要显式给出换行控制符
3、FORMAT 中需要分别为后面每个item 指定格式符