目录
- AWK简单总结
- 常用命令选项
- 变量
- 内置变量
- 自定义变量
- printf命令
- 格式
AWK简单总结
awk
是linux/unix下的一个强大编程工具,他支持用户自定义函数和动态正则表达式,灵活性强,运行速度快。
常用命令选项
- -F fs:fs指定输入分隔符,fs可以是字符串或正则表达式,如-F:
- -v var=value:赋值一个用户定义变量,将外部变量传递给awk
- -f scripfile:从脚本文件中读取awk命令
变量
内置变量
-
FS :输入字段分隔符,默认为空白字符
awk -v FS=“:” ‘{print $1}’ /etc/passwd #以冒号为分隔符,打印第一列
-
OFS :输出字段分隔符,默认为空白字符
awk -v FS=‘:’ -v OFS=‘|’ ‘{print $1,$2}’ /etc/passwd
-
RS :输入记录分隔符,指定输入时的换行符,原换行符仍有效
awk -v RS=“:” ‘{print $1,$2}’ /etc/passwd 以冒号为节点进行换行打印
-
ORS :输出记录分隔符,输出时用指定符号代替换行符
awk -v FS=‘:’ -v ORS=‘|’ ‘{print $1,$2}’ /etc/passwd
-
NF :字段数量, $NF引用最后一列,$(NF-1)引用倒数第2列
[root@www ~]# awk -v FS=“:” ‘{print $1,$(NF-1),$NF}’ /etc/passwd
-
NR :行号,后可跟多个文件,第二个文件行号继续从第一个文件最后行号开始
[root@www ~]# awk -v FS=‘:’ ‘{print $1,NR}’ /etc/passwd | head -n 5
-
FNR :各文件分别计数, 行号,后跟一个文件和NR一样,跟多个文件,第二个文件行号从1开始
awk -v FS=‘:’ ‘{print $1,FNR}’ cdx.file /etc/passwd| head -n 5
-
FILENAME :当前文件名
[root@along ~]# awk ‘{print FILENAME}’ cdx.file
-
ARGC :命令行参数的个数
[root@www ~]# awk ‘BEGIN {print ARGC}’ 1 2 3 4 3 -
ARGV :数组,保存的是命令行所给定的各参数,查看参数
[root@www ~]# awk 'BEGIN {print ARGV[0]}' 1 2 3 4 3
awk
[root@www ~]# awk 'BEGIN {print ARGV[4]}' 1 2 3 4 3
4
[root@www ~]# awk 'BEGIN {print ARGV[6]}' 1 2 3 4 3
[root@www ~]# awk 'BEGIN {print ARGV[5]}' 1 2 3 4 3
3
自定义变量
自定义变量( 区分字符大小写)
(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命令
格式
(1)格式化输出
printf` `"FORMAT"``, item1,item2, ...
① 必须指定FORMAT
② 不会自动换行,需要显式给出换行控制符
③ FORMAT 中需要分别为后面每个item 指定格式符
(2)格式符:与item 一一对应
-
%c: 显示字符的ASCII码
-
%d, %i: 显示十进制整数
-
%e, %E: 显示科学计数法数值
-
%f :显示为浮点数,小数** %5.1f,带整数、小数点、整数共5位,小数1位,不够用空格补上
-
%g, %G :以科学计数法或浮点形式显示数值
-
%s :显示字符串;例:%5s最少5个字符,不够用空格补上,超过5个还继续显示
-
%u :无符号整数
-
%%: 显示% 自身