awk

1、awk '{print }' maillog                                                               相关于 awk '{print $0}' maillog 相当于 cat

     awk '/unknown/{print}' tmp.txt                                                 匹配查询带有unknown 的行,相当于grep

     awk '!/unknown/{print }' tmp.txt                                               打印不匹配正则表达式的行 ,相当于grep -v

     awk '/unknown/{print x};{x=$0}'                                               打印匹配正则表达式的前一行,不打印当前行 
     awk '/unknown/{print (x=="" ? "match on line 1" : x)};{x=$0} '     打印匹配正则表达式的前一行,不打印当前行 

     awk '/unknown/{getline;print}' tmp.txt                                      打印匹配正则表达式的后一行,不打印当前行                                 

2、awk '1;{print ""}' maillog 
     awk 'BEGIN{ORS="\n\n"};1'                                                    maillog   每行后面添加一行空白行
     awk '1;{print "\n"}' maillog                                                      每行后面添加两行空白行  

3、Apr 20 14:31:14 fd01 postfix/qmgr[4372]: 5F46F24DC6A: from=<test@abc.com>, size=2187, nrcpt=1       
     cat test.log |grep nrcpt  |awk -F "=|," '{print $4}'             取字符'=’和',' 之间size大小部分

4、awk  'BEGIN { FS="[ :\t|]" } {print $1}'  maillog                 以 空格、冒号、tab、管道同时作为分割符

5、ls -l |awk ' {size=size+$5;} END{print "size is ", size}'
      size is  5422624
      ls -l |awk ' {size+=$5;} END{print "size is ", size}'
      size is  5422624
      ls -l |awk 'BEGIN {} {size=size+$5;} END{print "size is ", size}'
       size is  5422624

      ls -l |awk 'BEGIN {size=0;} {size=size+$5;} END{print "size is ", size}'
       size is  5422624                                                                  没初始化size默认是0,妥当做法将size初始化为0                    

       ls -l |awk 'BEGIN {print "The file size"} {size=size+$5;} END{print "size is ", size}'
       The file size                    
       size is  5422624                                                                    统计目录下文件的字节数

6、awk 'NF > 6'                                                                           打印列数超过6的行

     awk '{ field = $NF }; END{ print field }' tmp.txt                      最后一行的最后一列

7、 awk '{print FNR " " $0}' test.log  

      awk '{print FNR "\t" $0}' test.log                                            每行前添加连续编号

      awk '{print}' test.log |awk 'NF{$0=++a "  " $0};{print}'

      awk '{printf("%5d : %s\n", NR,$0)}'                                         添加编号

      awk '{print (NF? ++a " :" :"") $0}'

8、 awk 'END{print NR}' tmp.txt                                                   文件行数的统计(cat tmp.txt |wc -l) 

9、  awk '{print NF}' test.log |awk '{sum+=$1}END{print sum}'   

       awk '{ total = total + NF }; END {print total}' tmp.txt             文件区域之和

10、 awk '/11336/{n++}; END {print n}' tmp.txt                             文件中包涵关键字‘11336’ 的行有多少

        cat  tmp.txt  |grep  11336 |wc -l

11、awk '{sub(/fd01/,"sex");print}' tmp.txt                                     用sex 替换fd01        subsitution  替换

        awk '{gsub(/fd01/,"sex");print}' tmp.txt                                  用sex 替换fd01  全部替换

        awk '{sub(" ","|");print}' tmp.txt                                               用"|" 替换空格“ ”

      

12、RS:Record Separator   记录分隔符     ORS:Output Record Separate  输出记录分隔符  (行列分隔符转换互逆过程)

       FS:Field Separator        区域分隔符    OFS:Out of Field Separator      输出区域分隔符  (分隔符的替换过程

     a:RS让每个分隔符后面的内容重新变成一行

        echo "a|b|c" |awk 'BEGIN{ RS="|"; } { print $0 }'     注释 a、b、c 都变成了一行

     b:ORS可以看成RS的逆向过程,将“换行符号”替换成你想要的符号,

        awk 'BEGIN{ ORS="----" }{ print $0 }' tmp.txt         注释换行符变成了“----”

     c:FS字段分隔符 相当于awk -F 

        echo "a**b**c" |awk 'BEGIN{FS="**";}{print $1,$2,$3}'   结果 a b c

      d: echo "a----b----c" |awk 'BEGIN{ FS="----";OFS="*****" }{ print $1,$2,$3 }'

          结果为a*****b*****c ,分隔符由---- 变成了*****

          echo "a b c" |awk 'BEGIN{ OFS="*****" }{NF=NF ;print $1,$2,$3 }' 

          echo "a b c" |awk 'BEGIN{ OFS="*****" }{$1=$1; print $1,$2,$3 }' 

          结果a*****b*****c       

13、awk '{sub(/^[ \t]+/,"");print}' tmp.txt                      左对齐

    awk '{ $2 = ""; print }'                      删除第二列

    awk '{sub(/[ \t]+$/, "");print}' tmp.txt      删除每行结尾的空白
    awk '{gsub(/^[ \t]+|[ \t]+$/,"");print}'      删除开关和结尾的空白
    awk '{NF=NF;print}' tmp.txt                   删除每列之间的空白
    awk '{$1=$1;print}' tmp.txt                   删除每列之间的空白

    awk '! a[$0]++' tmp.txt                       删除重复行

    awk '!($0 in a) {a[$0];print}' tmp.txt        删除重复行

    awk NF tmp.txt                                删除空白行

    awk '/./' tmp.txt                             删除空白行 

    awk '{sub(/^/, "sex");print}'  tmp.txt        每行前插入字符sex
    awk '{sub(/^/," ");print}' tmp.txt            每行前插入字符" "
    awk '{printf "%16s\n", $0}' tmp.txt           宽度为16右对齐
    awk '/nect/{gsub(/fd01/, "sex")};{print}' tmp.txt 

                                         包含 "nect" 的行里,将 "fd01" 替换为 "sex"

    awk '!/nect/{gsub(/fd01/, "sex")};{print}'

                                         不包含 "nect" 的行里,将 "fd01" 替换为 "sex"

    awk '{gsub(/fd01|bounce|sent/, "sex"); print}'   将多项字符替换成"sex"

14、awk 'NR < 3' tmp.txt                             打印文件前两行,相当于head -2

    awk 'END{print}'                                 打印文件最后一行,相当于 tail -1

    awk '{y=x "\n" $0; x=$0};END{print y}'  tmp.txt  打印文件最后两行,相当于 tail -2

    awk '{print}' tmp.txt |awk 'NR==1;END{print}'    打印第一行和最后一行

15、awk '/AAA/; /BBB/; /CCC/' tmp.txt                以任何顺序查找
    awk '/AAA.*BBB.*CCC/'     tmp.txt                以指定顺序查找

    awk 'length > 100' tmp.txt                       长度大于100的行

16、awk 'NR==8,NR==12'                               打印8到12 (包涵8和12行)

    awk 'NR==15'                                     打印第15行
    awk 'NR==15 {print;exit}'                        打印第15行 (高效大文件)

 

 

   

   

   

  

                                        

      

 

转载于:https://my.oschina.net/u/1758546/blog/226835

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值