投稿    登录
欢迎光临 www.huangdc.com

awk 高级命令

Linux huangdc 6887℃ 0评论

前面写了几篇文章,关于sed 基础命令、sed 高级命令 及 awk 基础命令 的介绍及操作可以查看:

sed 和 awk 系列文章:

sed 基础命令:http://www.huangdc.com/109

sed 高级命令:http://www.huangdc.com/123

awk 基础命令 : http://www.huangdc.com/143

awk 高级命令:http://www.huangdc.com/146 (本文)

好吧,我们来看看awk 的高级命令 ,还是那句话高级的awk命令需要更大的决心来掌握,一旦你理解了这些命令,那么就可以认为自己是真正的awk主人了

awk 基础命令 我简单总结了: 程序设计模型  , 模式匹配 , 系统变量 , 记录和字段 , 表达式 , 关系操作符和布尔操作符 ,格式打印,向脚本传递参数

接下来我们看看 awk 高级命令 : awk中的条件和循环结构的语法借鉴于C程序设计语言。

awk 条件语句

条件语句用于在执行操作之前做一个测试。模式匹配规则本质就是影响往输 入循环的条件表达式;条件语句以if开头,并计算放在圆括号中的表达式。 语法是:(条件表达式可能包含算术运算符、关系操作符、布尔操作符)

if(expression){

     action1;

     action3

} [else action2]

实例:将成绩分级表示出 A、B、C、D等级 ;A(大于等于90分),B(大于等于80 且 小于 90),C (大于等于60 且小于80),D (其他)

awk循环

循环是一种用于重复执行一个或者多个操作的结构。在awk中循环结构可以用while、 do或for语句来指定

while循环语法

        while(condition)

                action

do循环语法:(do语句是while循环的一个变型)

        do

                action

        while(condition)

for循环语法:(for语句是和while循环一样,但是语法更紧凑)

        for(set_counter ; test_counter ; increment_counter)

                action

#set_counter 计数器变量初始值; test_counter 测试的条件; increment_counter 递增计数器

for循环实例:

。。。。

awk 数组

数组是可以用来存储一组数据的变量。通常这些数据之间具有某种暧昧关系。 数组中的每一个元素通过他们在数组中的小标来访问。每个下标都用方括号 括起来,给数组中的一个元素赋值如下:

      array[subscript]=value

在awk中不必指明数组的大小,只需要为数组指定标识符。向数组元素赋值是最容易的事。

关联数组(重点):在awk中,所有的数组都是关联数组。关联数组的独特之处 在于它的下标可以是一个字符或者一个数值,关联数组在数组的下标和元素之间建 立了一种“关联”,每个元素都有两个相关的值:元素的下标和元素的值。

它的强大功能就是可以使用字符串作为一个数据的下标

       array[“string”]=”BASIC”

有一组特殊的循环语法可以访问关联数值的所有元素。for循环的一个版本:

       for( variable in array)

              do something whith array[variable]

#variable in array: 依次获取关联数值的下标

关联数组实例:查看且统计并发请求数及其TCP连接状态

1、测试数组中的成员资格

关键词in也是一个操作符,用在条件表达式中用来测试一个下标是否是数组的成员:

 item in array

如果array[item]存在则返回1,否则返回0

 if( “item” in array ) print “Found item”

2、用split()创建数组

内置函数split()能够将任何字符串分解到数组的元素中。语法:

n=split(string, array, separator)

string是要被分割到名字为array的元素中的输入字符串。数组的下标从1开始到n,n 即为数组中的元素的个数,元素根据指定的separator分割符来分解

3、删除数组元素,语法:

     delete array[subscript]

awk函数

函数是一个独立的计算过程,它接受一些参数作为输入并返回一些值,awk 有许多内置函数。可以分为两组

1、算术函数

2、字符串函数

awk也支持用户 自定义函数,允许你编写自己的函数来扩展内置函数

awk内置算术函数 描述
cos(x) 返回x的余弦
exp(x) 返回ex次幂
int(x) 返回x的整数部分的值
log(x) 返回x的自然对数
sin(x) 返回x的正弦
sqrt(x) 返回x的平方根
atan2(y,x) 返回y/x的的反正弦
rand() 返回为随机数r,其中0<=r<1

awk字符串函数 描述
gsub(r,s,t) 在字符串t中用字符串s替换和正则表达式r匹配的所有字符串。返回替换的个数。如果没有指定t,默认$0
index(s,t) 返回子串t在字符串s中的位置,如果没有指定s,则返回0
length(s,t) 返回字符串s的长度,当没有给出s时,返回$0的长度
split(s,a,sep) 创建数组
sub(r,s,t) 在字符串t中用s替换正则表达式r的首次匹配

通常情况下,我们将函数定义放置脚本顶部的模式操作规则之前。函数用下面的语法定义:

            function name(parameter-list){

                  statement

            }

awk简单实例

1、对每行求和

awk ‘{s=0;for (i=0;i<NF;i++) s=s+$i; print s}’

2、对所有行所有字段求和

awk ‘{for (i=0;i<NF;i++) s=s+$i; END {print s+0}’

3、删除行首和行末的空格

awk ‘{ gsub(/^[ \t]+|[ \t]+$/,””); print }’

4、删除每行的第二个字段

awk ‘{ $2 = “”; print }’

5、删除连续的重复行

awk ‘a != $0; { a = $0 }’

6、删除非连续的重复行

awk ‘!a[$0]++’

7、删除所有的空行

awk NF

 

 

转载请注明:Huangdc » awk 高级命令

喜欢 (12)or分享 (0)
发表我的评论
取消评论

表情
(3)个小伙伴在吐槽