一:awk重要性


"一个linux工程师水平的高低很大部分取决于其处理文本内容的水平"

awk与grep,sed等,并列为最重要的3个文本处理工具


grep:global file regular expression search and print it out,属于文本搜索工具

sed:stream editor,流文本编辑器

awk:格式化文本生成器


二:awk的使用


awk [-common-option] 'pattern{action}' file1 file2...


一.common-option

-F 规定域分割符,默认为"空内容"

-v 可规定自定义变量

-f 规定脚本


二.pattern

1.BEGIN : awk 'BEGIN{print "hello world"}'  此语句非常特殊,省略了pattern和对象

2.END: awk -F: 'END{print "hello"}' /etc/passwd

(BEGIN 和 END是特殊的pattern,仅在命令运行的前后运行一次)

3.正则表达式

4.表达式 $3>20

5.模式匹配表达式 $3~  (跟我读:域3匹配) ; $3~!(跟我读:域3匹配不到)

6.范围模板

/pat1/,/pat2/匹配两个模板之间的行:

范例

   cat /etc/passwd -n

   awk -F: '/se$/,/in$/{print $0,NR}' /etc/passwd

三.action

1.变量或数组赋值

2.输出 或输出重定向 print,printf

3.函数

4.流程控制


四.变量

1.几个特殊的内置变量

NF (number of field) 域的个数

FS(field seperator) 域分割符

RS(record seperator) 行分割符

NR(number of record) 行数,相对于所有的

FNR(file number of record)

OFS(output filed seperator ) 域输出时的分割符

ORS(output raw seperator) 行输出的分隔符

ARGC:保存awk命令行参数个数

ARGV:保存awk命令行的参数

FILENAME:保存awk正在处理的文件名

ENVIRON:保存awk运行时.shell的环境变量

2.自定义变量

变量的命名跟C语言一样,

可自定义关系数组

五.运算

1.比较运算

2.逻辑运算

3.数值运算

4.匹配运算.~/RE/

六.流程控制

if-else ; while ; do-while ; for ; next ;break ;continue

七.函数

1.内置字符串函数

split(filed,variable,FS)  结果存在variable数组中

length()返回域或字符串的长度

substr(string,start-number[,length-number])

tolower(string)

toupper(string)

2.内置数学函数

sin(),cos(),int(),rand()

3.自定义函数

function fname(var1,var2){ return ;} 最好放在action语句外部的任意位置


八:awk脚本

#!/usr/bin/awk