文章目录
1、什么是awk?
awk是一种编程语言,用于在linux/unix下对文本的数据进行数据处理。它支持用户自拟定函数和动态正则表达式等先进功能;它在命令行中更多是作为脚本来使用;awk有很多内建的功能如函数、数组等,灵活性是awk最大的优势。
2、 常用命令选项
- -F fs : fs指定输入分隔符,fs可以是字符串或正则表达式,如 -F
- -V var=value:赋值一个用户定义变量,将外部变量传递给awk
- -f scripfile:从脚本文件读取awk命令
3、awk变量
变量:内置和自拟定变量,每个变量前加 -v 命令选项
4、内置变量
(1)格式
- FS:输入字段分隔符,默认为空白字符
- OFS:输出字段分隔符,默认为空白字符
- RS:输入记录分隔符,指定输入时的换行符,原换行符仍有效
- ORS:输出记录分隔符,输出时用指定符号代替换行符
- NF:字段数量,共有多少字段,$NF引用最后一列
- NR:行号,后可跟多个文件
- FNR:各文件分别计数,行号,后跟一个文件和NR一样,跟多个文件,第二个文件行号从1开始
- FILENAME:当前文件名
- ARGC:命令行参数的个数
- ARGV:数组,保存的是命令行所给定的各参数,查看参数
(2)演示
[root@CentOS centos]# cat awkdemo
hello:world
linux:redhat:lalala:hahaha
along:love:youou
[root@CentOS centos]# awk -v FS=':' '{print $1,$2}' awkdemo
#FS指定输入分隔符
# $1,$2是第一个字段和第二个字段
[root@CentOS centos]# awk -v FS=':' -v OFS='---' '{print $1,$2}' awkdemo
#OFS指定输出分隔符
[root@CentOS centos]# awk -v RS=':' '{print $1,$2}' awkdemo
#RS指定符号换行符
[root@CentOS centos]# awk -v FS=':' -v ORS='---' '{print $1,$2}' awkdemo
#ORS用指定符号代替换行
[root@CentOS centos]# awk -F: '{print NF}' awkdemo
#NF有多少字段
[root@CentOS centos]# awk -F: '{print $(NF-1)}' awkdemo
# $(NF-1)倒数第二列
[root@CentOS centos]# awk '{print NR}' awkdemo
#NR每行行数
[root@CentOS centos]# awk END'{print NR}' awkdemo
[root@CentOS centos]# awk BEGIN'{print ARGC}' awkdemo awkdemo1
#ARGC命令行参数的个数,awk一个参数,awkdemo第二个参数,awkdemo1第二个参数
[root@CentOS centos]# awk BEGIN'{print ARGV[0]}' awkdemo awkdemo1
5、自拟定变量
自拟定变量(区分字符大小写)
(1)-v var=value
- 先定义变量,后执行动作print
- 在执行动作print后定义变量
(2)在program中直接定义
可以把执行官的动作放在脚本中,直接调用脚本-f
6、printf命令
(1)格式
printf` `"FORMAT"``, item1,item2, ...
- 必需指定FORMAT
- 不会自动换行,需要显示给出换行控制符,\n
- FORMAT中需要分别为后面每个item指定格式符
(2)格式符
- %c: 显示字符的ASCII码
- %d, %i: 显示十进制整数
- %e, %E: 显示科学计数法数值
- %f :显示为浮点数,小数%5.1f,带整数、小数点、整数共5位,小数1位,不够用空格补上
- %g, %G :以科学计数法或浮点形式显示数值
- %s :显示字符串;例:%5s最少5个字符,不够用空格补上,超过5个还继续显示
- %u :无符号整数
- %%: 显示% 自身
(3)修饰符
- #[.#]:第一个数字控制显示的宽度;第二个#表示小数点后精度,如%5.1f
- -:左对齐(默认右对齐),%-15s
- +:显示数值的正负符号%+d
[root@CentOS centos]# awk -F: 'BEGIN{printf "username userid\n-----------------------------\n"}{printf "%-20s|%-10.3f\n",$1,$3}' /etc/passwd
username userid
-----------------------------
root |0.000
bin |1.000