文本三剑客之---awk

本文详细介绍了awk命令的基本格式、主要选项、常用功能,包括字段分隔符设置、条件表达式、控制语句、数组操作以及内置函数的使用。awk通过其强大的文本处理能力,成为Linux系统中不可或缺的工具。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本格式:

    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指定分隔符 +“指定变量”+ 被执行文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值