awk基础
简介
AWK是一种优良的文本处理工具。它是 Linux 中也是任何环境中现有的功能最强大
的数据处理引擎之一,相比sed常常作用于一整行的处理,awk比较倾向于将一行分成数
个“字段”来处理。所以,awk相当适合处理小型的数据处理。
基础用法
awk[选项] ‘program’ var=value file…
awk[选项] -f programfilevar=value file…
awk[选项] 'BEGIN{ 动作;… } pattern{ 动作;… } END{ 动作;… }' file ...
-
awk程序通常由:BEGIN语句块、能够使用模式匹配的通用语句块、END语句块,共3部分组成
-
program通常是被单引号或双引号中
示例
- awk主要是处理每一行的字段内的数据,而默认的字段的分隔符为空格键或[TAB]键。举例说明,我们用cat /etc/passwd这个可以查看用户:
- 若我想取出用户名称和shell类型,且名称与shell类型以冒号隔开,则成这样:
awk -F: '{print $+1":"$7} ' /etc/passwd
-
这是awk最常用的动作,通过print的功能将字段数据列出来,字段的分割可以自己选择 以什么方式隔开,-F指定域分隔符为’:’。
系统变量
- OFS 输出字段分隔符,默认为空白字符
- FS 输入字段分隔符,默认为空白字符
- ORS 输出记录分隔符,输出时用指定符号代替换行符
- RS 输入记录分隔符,指定输入时的换行符,原换行符仍有效
- NF 每一行的字段数量
- NR 行数
- FNR 各个文件分别计数,行数
- ARGC 命令行的参数个数
- ARGV 数组,保存的是命令行所给定的各参数
- FILENAME 当前文件名
此外,$0变量是指整条记录,$1表示当前行的第一个域,$2表示当前行的第二个域,……以此类推。
自定义变量(区分字符大小写)
-
-v var=value
-
在program中直接定义
两种方法:
VAR=10000;echo | awk -v VARIABLE=$VAR '{ print VARIABLE }'
var1="aaa";var2="bbb";echo | awk '{ print v1,v2 }' v1=$var1 v2=$var2
选项参数
- -F
指明输入时用到的字段分隔符 。
- -v var=value
自定义变量。
要点
- 逗号分隔符
- 输出的各item可以字符串,也可以是数值;当前记录的字段、变量或awk的表达式
- 如省略item,相当于print $0
printf命令
格式化输出:
printf“FORMAT”, item1, item2, ...
- 必须指定FORMAT
- 不会自动换行,需要显式给出换行控制符,
- FORMAT中需要分别为后面每个item指定格式符
格式符
- %c 显示字符的ASCII码
- %d 显示十进制整数
- %i 显示十进制整数
- %e 显示科学计数法数值
- %E 显示科学计数法数值
- %f 显示为浮点数
- %g 以科学计数法或浮点形式显示数值
- %G 以科学计数法或浮点形式显示数值
- %s 显示字符串
- %u 无符号整数
-
%% 显示%自身
awk -F: '{printf"%s",$1}' /etc/passwd
修饰符
- /#[.#]:第一个数字控制显示的宽度;第二个#表示小数点后精度,%3.1f
- -: 左对齐(默认右对齐)%-15s
-
+:显示数值的正负符号%+d
awk -F: '{printf "%-20s %10d\n",$1,$3}' /etc/passwd
awk -F: '{printf "Username:%-15s,UID:%d\n",$1,$3}' /etc/passwd
原创文章,作者:Az2h1丶,如若转载,请注明出处:http://www.178linux.com/81522