文本三剑客之---awk

基本格式:

    awk+ options(选项)+ ‘{ program }’(执行程序内容)+ file

其中 program 通常由:(BEGIN)、通用、(END)三部分组成,

BEGIN与END的决定动作语句分别是文件处理前执行一次、文件处理后执行一次。

注意:awk是对文件逐行顺序进行执行

Options:

1.  -v FS=“符号”(等同于 - F“符号”)

表示将指定文件中的字段分隔符作为打印字符

2.  -v OFS=“符号”

表示设定打印内容字段分隔符

3.  -v RS=“符号”

表示将指定文件中的字段分隔符作为换行字符

4.  -v ORS=“符号”

表示设定打印内容的换行分隔符

Program:

    一、基础运用:

1.  在{print}中,NF表示以设定的字段分隔符分隔成的字段数量

2.  其中 $0 表示 逐行打印文件全部内容

3.  $1,$2,$3,…… 表示逐行打印以设定的字段分隔符分成的第几段,$(NF-数字)表示意思同上

4.  NR 表示打印显示每行行号

5.  可定义变量进行引用:

‘{var=value;print var}’等同于 –v var=value‘{print var}’

6.  条件表达式(三目表达式)

Selector?if-true-expression:if-false-expression

判断语句?为真描述信息:为假描述信息

7.  可根据  /regular expression/ 格式正则表达式来处理匹配的行

其中regular expression 在 真 的情况下,才会处理

真:非空字符,非0值

8.  奇数行打印: awk ‘n=!n’(sed -n ‘1~2p’)

偶数行打印: awk ‘!(n=!n)’(sed -n ‘2~2p’)

    二、控制语句运用模式:

1.  if -- else

if(condition条件){statement描述}else{statement描述}

可进行多重if判断

2.  while

while(condition条件){statement描述}

条件为“真”,进行循环

3.  for

for(variable assignment;condition;iteration process){statement描述}

     (变量赋值;条件判断;变量叠加)

4.  switch

switch(expression表达式){case value数值 or /REGEXP/:statement描述;……;default:statement描述}

    三、数组:

1.  array[“字符串”]=“设定字符” 若某数组元素不存在,则awk会自动创建,并赋值为“空”。

2.  for(var in arry变量在数组中循环提取){for-body循环体}

可以遍历数组中的每个元素

四、函数:

1. length(字符串)返回指定字符串的长度

2. sub(r,s,n)

表示对字符串n 以r模式搜索匹配到的第一个内容替换为s表示内容

gusb(r,s,n)则表示全部替换

3.  split(r,array,n)

表示以n代表的分隔符,切割字符串n,并将切割结果保存至array数组中,下标为1,2,3………

4.  自定义函数格式:

将函数写入文件file

function name(parameter参数,……){

     Statement 描述

     return expression 返回表达式值

}

BEGIN{print name(需要执行的变量)}

使用 awk -v 指定变量 -f file

实参:“需要执行的变量”函数中 形参:“参数”一一对应)

调用shell命令:

1.system

    system(除awk中的变量外其他变量需要使用双引号)

2.将program 部分写成脚本,加上执行权限,格式如下:

vim filename

#!/bin/awk –f

{statement描述信息}

chmod +x filename加上执行权限

filename -F指定分隔符 +“指定变量”+ 被执行文件

猜你喜欢

转载自blog.csdn.net/Ruixycowboy/article/details/80961214