目录
- 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 :无符号整数 
-  %%: 显示% 自身 




















