linux基础知识之:awk编程

1.域的概念是什么,分隔符到底分隔的是什么


分割符的目的:设定域的分隔的规则,分割后得到的一段段的内容就是域,如果是第一个域,就用$1得到....

如果分割后的域里面的内容不全是所需要的
比如域1里面是  
<mybatis>testStr1></mybatis>
<mybatis>testStr2></mybatis>
sddd

要想得到testStr,可以用两次awk:

awk -F '<mybatis>' '{if($2==""){ print "error"} else{ print $2}}' data.txt | awk -F '><' '{print $1}'
testStr1
testStr2
error

注意:, if($2=="")里面没有空格


2. 语法结构:

查看man awk里面有一句话很好:
An AWK program is a sequence of pattern {action} pairs and  user  function definitions.

last -n 6|awk '/^wis/{print $1,$4} /^wis2/{print $1,$4}'

如果写在文件里面,可以看的更明白

BEGIN{

}
{
print "匹配0";
}
/wis/{

print "匹配到wis:"$1;

}
/pts/{

print "匹配到pts:"$2;

}

/pts*4$/{

print "匹配到pts*n4";

}
1{
print "test for expretion";
}
#在END之前,把每一行当成一个字符串去匹配,而不是用域的值去匹配,所以pts*4$会匹配结果为0
END{
print "/bash/awk/test"
}


还有,partern是什么?

A pattern can be:
              BEGIN
              END
              expression
              expression , expression


expretion可以是:

逻辑表达式--不用再用if去判断

正则表达式:把每一行当成一个字符串去匹配,而不是用域的值去匹配
正则表达式参考:http://www.jb51.net/article/42989.htm

3. 调用awk的方式

1.命令行方式
awk [-F  field-separator]  'commands'  input-file(s)
其中,commands 是真正awk命令,[-F域分隔符]是可选的。 input-file(s) 是待处理的文件。
在awk中,文件的每一行中,由域分隔符分开的每一项称为一个域。通常,在不指名-F域分隔符的情况下,默认的域分隔符是空格。

2.shell脚本方式
将所有的awk命令插入一个文件,并使awk程序可执行,然后awk命令解释器作为脚本的首行,一遍通过键入脚本名称来调用。
相当于shell脚本首行的:#!/bin/sh
可以换成:#!/bin/awk

3.将所有的awk命令插入一个单独文件,然后调用:
awk -f awk-script-file input-file(s)
其中,-f选项加载awk-script-file中的awk脚本

原则:
帮助文档里面这样说的:
Short programs are entered on the  command  line  usually
       enclosed  in ' ' to avoid shell interpretation.  Longer programs can be
       read in from a file with the -f option.
简单归纳下就是:
如果是简单的分析,或者通用性不高的情况下,直接在命令行下就行,一些shell脚本里面经常看到awk的命令行

如果是通用行比较高,重复使用的概率大,或是分析数据的逻辑比较复杂,那选择第三种方式好了.

至于第二种,类似于shell脚本的执行,所以要自动执行的情况下,就考虑这种

4.其他内容

任何一个编程语言,感觉很多东西都是类似的,只是一些细小的规则可能不一样,

比如,肯定少不了用户自定义变量,自定义函数,数组,内置的变量/函数...


变量

   There  are two basic data types, numeric and string.

其中,对于字符串变量,涉及一些转义的知识

输入:

awk '{print "this is a test for \\ and \" and.\n"}'

结果:

this is a test for \ and " and.


数组

提供的是一维的数组,没有2维!
Array elements are  expressed  as
       array[expr].   Expr  is  internally  converted  to string type, so, for
       example, A[1] and A["1"] are the same element and the actual  index  is
       "1".   Arrays  indexed  by strings are called associative arrays.

控制语句

控制语句是学习C的,所以基本一致,非常好理解,比shell好理解N多


内置变量和内置函数

为了方便,预定了一些内置变量和内置函数,

东西比较多,直接看man帮助文档,里面写的非常清楚,比什么资料都好


tips:

变量 --和C类似,只是不用定义类型,也不要用var关键字去定义

控制语句   里面的语句只是可以不加分号,也可以加上--感觉加上看着舒服点吧

函数也很像,更像是JS的函数,不用定义返回类型等


基础知识参考:


http://www.linuxidc.com/Linux/2014-12/110939.htm
http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html
http://www.open-open.com/doc/view/e3356f6ef4ea42d6a2c48bd5dce34f38

日志分析demo:
http://blog.csdn.net/teamlet/article/details/38046409



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值