码迷,mamicode.com
首页 > 系统相关 > 详细

linux shell学习之awk ---新手笔记

时间:2015-05-04 21:39:06      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:

1.AWK的pattern
  BEGIN
  END
  expression 例: NF>10 或/^a/
  /regular expression/?
    可以?用类似/^a/这种写法
    另一种写法$1 ~ /^a/       //字段匹配
  表达式之间可以?用&& || ! ?: 等操作符做布尔运算(当然可以是正则表达式)
  expression , expression 表?示开始和结束 例: NF==5,NF==10

例子1: cat /etc/passwd |awk -F":" ‘NR==5,NR==10{print NR,$1}‘   //只显示passwd文件的第5-10行,并定义字段分隔用:号

     5 sync
        6 games
        7 man
        8 lp
        9 mail
       10 news

       知识点:1.-F参数。2.expression , expression的用法。

2.AWK的action

  完善的编程语?言?支持变量赋值、数组、判断、循环、?自定义函数
  有很?方便的预定义的变量和函数
  最常?用的是print函数
  字段取值$1、$2、$3……$NF
  $0就是文件的所有行

     注意:awk的定义变量不是一定非得$符号开头,$符号是取字段值。

例子2:awk ‘BEGIN{RS="[^0-9a-zA-Z]"};{count[$0]++};END{for (i in count) print i,count[i]}‘<1.txt

  iwant 1
  chinawelcome 1
  ilove 1
  to 7
  china 4
  love 4
  changsha 5
  i 4
  beijing 2
  welcome 5
  you 5

注:语句作用:将文件的每一个单词提取出单独成行,并统计单词出现的次数。

知识点:1.BEGIN,END块的写法和使用({}括起来,;来隔开)。2.分隔符RS和FS的区别(RS:遇到RS即另开一行)。3.数组的使用。4.for循环。5.文件重定向输入

例子3 对上面例子进行扩展(排序并写入新文件)

 awk ‘BEGIN{RS="[^0-9a-zA-Z]"};{count[$0]++};END{for (i in count) print i,count[i] | "sort  -r -k2 -o 3.txt" }‘<1.txt   

知识点:1.print用法。print … | command : 运?command命令并将print的输出作为command的输?。注意整个command包括参数所有部分都在双引号内

            2. sort用法。-o参数将排序结果写入文件,而此重定向文法完成。

3. getline的用法

   例子:将文件合并起来。

     vi join.awk

     #!/usr/bin/awk -f

    {  

  getline sl<ARGV[2]

      print $0 sl

}

  执行:awk -f join.awk file1 file2

linux shell学习之awk ---新手笔记

标签:

原文地址:http://www.cnblogs.com/bowenlearning/p/4477006.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!