Chinaunix首页 | 论坛 | 博客
  • 博客访问: 153815
  • 博文数量: 24
  • 博客积分: 59
  • 博客等级: 大尉
  • 技术积分: 192
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-20 13:10
文章分类

全部博文(24)

文章存档

2012年(1)

2011年(2)

2009年(19)

2008年(2)

我的朋友

分类: LINUX

2008-12-26 10:08:50

 

shell编程笔记二

深入讨论awk
  条件操作符
    <
    >=
    <=
    ==
    !=
    ~
    !~
  逻辑操作符
    &&   and
    ||   or
    !    not
    awk '{if ($4~/^\[17\/May\/2006/) print $0}' log.txt |wc -l
    awk '{if ($1!~/^218\.98\.157\.105/) print $0} log.txt' |wc -l
  awk的内置变量
    ARGC    //命令行参数个数
    ARGV    //命令行参数排列,数组使用形式ARGV[]
    ENVIRON  //支持队列中环境变量的使用,在awk中取得环境变量的值,使用形式ENVIRON["变量"]
    FILENAME  //awk浏览的文件名
    FNR    //浏览文件的记录数
    FS     //设置输入域分隔符,等价于命令行 -F选项
    NF     //浏览记录的域个数
    NR     //已经读出的记录数
    OFS    //输出域分隔符
    ORS    //输出记录分隔符
    RS     //控制记录分隔符
      awk -F '+' '{print NR,NF,ENVIRON["USER"],ARGC,ARGV[0]$0}' hello   //输出结果如下
         1 2 root 2 awk lskdfsdfi + sdfasdfsdf
         2 2 root 2 awk adf +sdfasdf
         3 2 root 2 awk asdf+safsdf
         4 2 root 2 awk as+asdfasdf
         5 4 root 2 awk df+sfasdf+asfas+afsadfs
  字符串函数
    gsub(r,s)    //在整个$0中用s替代r
    gsub(r,s,t)  //在整个t中用s替代r
    index(s,t)   //返回s中字符串t的第一次出现位置
    length(s)    //返回s长度
    match(s,r)   //测试s是否包含匹配r的字符串
    split(s,a,fs)  //用fs上将s分成序列a
    sprint(fmt,exp)  //返回经fmt格式化后的exp
    sub(r,s)     //用$0中最左边最长的子串替代s
    substr(s,p)  //返回字符串s中从p开始的后部分
    substr(s,p,n)   //返回字符串s中从p开始长度为n的后缀部分
      awk -F '#' '{if (gsub("s","S")) print $0}' hello.txt  //查找hello.txt文档用大写的S替换小写的s
      awk -F '#' '{if (gsub("s","S",$2)) print $0}' hello.txt  //查找每一行的第二列用S替换s
      awk -F '#' '{print index($2,"e")}' text.txt   //查找第二个域中每条记录内e第一次出现的位置
  printf修饰符
    %c     //ASCⅡ字符
    %d     //整数
    %f     //浮点数
    %e     //浮点数,以科学技术法表示
    %g     //新行
    %o     //八进制数
    %s     //字符串
    %x     //十六进制数
      awk -F '#' '{printf "%c",$1}' hello.txt
      awk -F '#' '{printf "%c\t%d\n",$1,$2}' hello.txt
  awk数组
    awk 'BEGIN{print split("as#bs#123",array,"#")}' //创建包含3个元素的数组arry,以#号分隔
    awk 'BEGIN{print split("as#bs#123",array,"#");print array[1]}'  //打印数组中的第1个元素
  输入重定向
    file
              被重定向的文档
    file
  信号的捕捉   //示例见advshellscript2.sh
    trap "name" signal(s)   //name通常为一个函数,用来处理捕捉到的信号;signal为捕捉到的一个或多个信号
    trap "hello" 2     //捕捉编号为2的信号,并把信号发送给hello函数进行处理
  向messages发送信息
    logger -p 1 -i "hi nihao"          //向messages发送等级为1,内容为"hi nihao"的记录
阅读(1178) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~