Unix/Linux 文本处理工具的一般选择流程:shell->awk->c/c++。在这里简单的介绍一下awk的基本感念和使用方式,算是入门简介。
awk的不同使用方式:
1. 命令行方式
2. -f参数方式,即将一段awk程序写入文件中
3. 利用命令解释器调用,#!/bin/awk -f (文件)
awk语法:
awk [-F re] [parameter...] ['prog'] [-f progfile] [in-file...]
1. -F re 允许awk更改其字段分割符
2. parameter 为不同的变量赋值
3. 'prog' awk的程序语段,必须被单引号括起来,防止被shell解释,这个语句的标准形式:'pattern{action}',其中,action由一系列awk语句组成,之间以 ';' 分割。awk解释他们,并将于pattern相符的记录进行操作,可以省略pattern或action,但是不能两者都省略。省略action表示将合适的记录输出到stdout;省略pattern匹配所有行。
4. -f progfile awk执行指定的文件,它符合awk的语法。
5. in-file awk的输入文件,awk允许对多个文件进行处理,未指定时认为是stdin
awk的记录、字段于内置变量:
awk支持对记录和字段进行处理,对字段的处理是grep和sed所不具备的。缺省情况下,一个记录即为一个文件的一行,一行中的某一个部分为记录中的一个字段。以$1 $2 $3...等顺序表示,$0表示整行。
字段默认的分割符是空格。以 -F re改变分割符,awk内部使用FS变量记录分割符。
eg: $awk -F % 'NR==7, NR==15{print $1$3$7}' myfile // 打印出myfile中7到15行的指定字段,以%分割的。
awk内置函数:
eg:printf 其使用方式和c语言的printf相似。
$awk '{printf "%03d %s\n", NR, $1}' myfile // 输出文件的行号和第三字段
一些使用方式:
1. $awk '/sun/{print}' myfile // 显示myfile中含 sun 的行。
2. $awk '/[Ss]|un/, [Mm]oon/{print}' mydoc // 显示第一个与sun或者Sun匹配的行 与 Moon 或者moon匹配的行之间的行。
3. $awk 'length ($0)>80{print NR}' mfile // 其中,length为内置函数,NR表示行号
awk变量:
内置变量的引用不使用 $,而自定义的变量使用 $
awk控制流程:
1. 任何在BEGIN之后的操作(在{}中),将在awk开始扫描输入前完成执行。
2. 任何在END之后的操作(在{}中),将在awk完成所有的扫描之后执行。
eg:$awk
>BEGIN {FS=":"; print "统计总额"; total=0}
>{print $3; total+$3}
>END{printf "总额: %.2f", total} infile
程序控制语句:
if/else
if(表达式)
语句
else
语句
while(表达式)
语句
do
{ 语句 } while(表达式)
for(初值; 终止条件; 步长)
{ 语句 }
循环中可使用 continue 或者 break
几个重要的内置变量:
FNR:当前记录数
NF:当前记录的字段
NR:以读出的记录数
FS:分割符
以上只是对awk极其简单的介绍,做为入门的参考。后续在使用过程中有深入的研究再做续篇!
阅读(1574) | 评论(0) | 转发(0) |