标签:awk
一,awk介绍awk:报告生成器,格式化文本输出
基本用法
a. awk程序通常由 BEGIN语句块,模式匹配的通用语句块,END语句块,这三部分组成
b. 选项
-F:指明输入时用到的字段分隔符
-v :指定变量
二,awk语言
分隔符,域和记录
a. awk执行时,有分隔符分隔的字段为域,标记为$1,$2...$n
$0为所有域 和shell中变量$含义不同
b. 文件的每一行为记录
c. 不指定域,默认执行print $0
三,awk工作原理
执行顺序
a. 执行BEGIN语句块
b. 逐行扫描文件,执行模式匹配语句块,从第一行到最后一行
c. 执行END语句块
这三个语句块都是可选语句块
print格式
print item1,item2,..
a. 逗号为分隔符
b. 输出的item可以是字符串,数值,当前记录的字段,变量或者awk的表达式
c. 省略item,相当于print $0
四,awk变量
内置变量
FS:输入字符分隔断,默认为空白字符
OFS:输出字段分隔符,默认为空白字符
RS:输入时的换行符,原换行符仍有效
ORS:输出时用指定的符号代替原换行符
NF:字段数量
NR:行号
FNR:分别显示每个文件的行号
FILENAME:当前的文件名
ARGC:命令行参数的个数,本身算第一个参数
ARGV:数组,AGRV[下标数],AGRV[0]是awk
自定义变量
a. -v var=value
b. 可以在模式语句块中直接定义
五,printf命令
格式化输出
a. 必须指定格式符
b. 不自动换行,需要给出换行控制符,\n
c. 需要分别给每个item指定格式符
格式符
%d:显示十进制整数
%f:显示为浮点数
%s:显示字符串
%u:显示无符号整数
%%:显示%本身
修饰符
#[.#]:第一个#控制显示的宽度,第二个#表示小数点后精确度
-:左对齐
+:显示数值的正负符号
操作符
a. 逻辑操作符
&& , || , !
条件表达式
?if-true:if-false
b. 算数操作符
+,-,*,/,%,^
-x:转换为负数
+x:转换为数值
c. 赋值操作符
=,+=,-=,*=,/=,%=,^=
++,--
d. 比较操作符
==,!=,>,>=,<,<=
e. 模式匹配符
~:左边是否和右边匹配包含
!~:是否不匹配
六,模式匹配
未指定,匹配每一行
/ /,仅处理能模式匹配到的行
关系表达式,结果为真进行处理
/ /,/ /,行范围,不支持直接给出数字格式
BEGIN/END模式
BEGIN{}:仅在开始处理文件中的文本之前执行一次
END{}:仅在文本处理完成之后执行一次
七,awk控制语句
if( ){ }else if( ){ } else if 要打全,跟脚本里的不一样
while(){}
条件为真进入循环,为假退出循环
对一行内的多个字段逐一类似处理时可使用
对数组中的各元素逐一处理时可使用
do{}while()
无论真假,先执行一次循环体
for(){}
for(变量 in 数组){}:遍历数组中的元素
next
提前结束对本行处理而直接进入下一行处理(awk自身循环)
八,awk数组
可使用任意字符串,字符串要使用双引号括起来
如果某数组元素事先不存在,引用时,awk会自动创建元素
九,awk函数
数值处理
srand() [种子,没有rand无法执行] rand():返回0和1之间一个随机数
int():取整数
字符串处理
length([s]):指定字符串的长度
sub(r,s,[t]):r是被替换的内容,s是替换的内容,t是字符串(可选),只替换匹配到的第一个内容
gsub(r,s,[t]):r是被替换的内容,s是替换的内容,t是字符串(可选),替换所有匹配到的内容
split(s,array,[r]):s是字符串,r是分隔符,用来分隔s,array是数组,元素为分隔后的字符串
自定义函数
函数名( ){
...
}
十,awk脚本
将awk程序写成脚本,直接调用或执行
在awk中调用shell命令,需用system
空格分隔,除了awk的变量其他都用""引用起来
标签:awk
原文地址:http://blog.51cto.com/13572810/2096806