首页 > 其他 > 详细

AWK用法

时间:2014-03-15 04:14:11      阅读:469      评论:0      收藏:0      [点我收藏+]

一、AWK基本用法 

  事例一
  bubuko.com,布布扣
 

             1、  打印文档中的所有内容

      方法一:awk ‘{print;}‘ awktest.txt

                    bubuko.com,布布扣

                     方法二:awk ‘{print $0}‘ awktest.txt

                     bubuko.com,布布扣

 

             2、  提取ThomasJasonRandy的数据。

            #awk ‘/Thomas/

            > /Jason/

           > /Randy/‘ awktest.txt

                    bubuko.com,布布扣 
 

              3、  打印第2列、第5

      方法一:awk ‘{print $2,$5}‘ awktest.txt

            bubuko.com,布布扣 

      方法二:awk ‘{print $2,$NF}‘ awktest.txt 

           bubuko.com,布布扣

           备注:$NF 指最后一列。

 

              4、  在文档的开头和结尾处加上注释

             # awk ‘BEGIN {print "employee name"}

              > {print;}

            > END {print "wages"}‘ awktest.txt

                bubuko.com,布布扣 
 

             5、 找出ID大于300的员工姓名

             awk ‘$1>300‘ awktest.txt

                    bubuko.com,布布扣 

              6、  统计技术部门员工人数

             awk ‘BEGIN {count=0;} $4 ~ /Technology/ {count++;} END {print count}‘ awktest.txt
          bubuko.com,布布扣

    7
、找出/etc/passwd 里面的用户名及配置文件并分开显示

            awk -F ":" ‘{print $1,$NF}‘ /etc/passwd

                 bubuko.com,布布扣 
 

二、正则表达式

             1、在配置文件和用户名前加上注释并隔行显示。

            awk -F ":" ‘{print "username:\t" $1,"\n\profile:\t" $NF "\n";}‘ /etc/passwd
     bubuko.com,布布扣
     备注:
\t 空格 \n另起一行

 

 事例二
    
bubuko.com,布布扣

            
、去掉不包含“Brown”的字段的行

             awk ‘$0 !~ /Brown/‘ grade.txt
        bubuko.com,布布扣 
 

         3、找出第六列值不大于第七列值的内容。

        awk ‘$6 <= $7‘ grade.txt

              bubuko.com,布布扣 
 

         4、找出第一列中第3个字符是“U”的数据

        awk ‘$1 ~ /^...u/‘ grade.txt

    bubuko.com,布布扣 
 

         5、找出含有Yellow或者Brown字段的内容

        awk ‘$0 ~ /Yellow|Brown/‘ grade.txt

             bubuko.com,布布扣 
 

三、AWK内置变量

 ARGC          命令行参数个数

 ARGV          命令行参数排列

 ENVIRON       支持队列中系统环境变量的使用

 FILENAME      awk浏览文件名

 FNR           浏览文件的记录数

 FS            设置输入域分隔符,等价于命令行-F选项 

 NF            浏览记录的域个数

 NR            已读的记录数

 OFS           输出域分隔符

 ORS           输出例句分隔符

 RS            控制记录分隔符

 

          1、  在文本内容前面增加2列,用于显示列数和行数,并在结尾显示文件名

          awk ‘{print NF,NR,$0} END {print FILENAME}‘ grade.txt

              bubuko.com,布布扣 
 

         2、  通过变量提取第6列值小于27的数据

          awk ‘BEGIN {date=27} ($6<date)‘ grade.txt

              bubuko.com,布布扣 
 

         3、  找出第一列中含有“e”字段的数据,并将第6列值-10,并显示167列数据。

         awk ‘{if($1 ~ /e/) $6=$6-10; print $1,$6,$7 }‘ grade.tx t

                bubuko.com,布布扣 
 

         4、  统计第六列总数并只显示结果

         awk ‘{(total+=$6)}; END {print total}‘ grade.txt
   bubuko.com,布布扣
     注:去掉{},则将数据全部显示出来,见下图。          
    bubuko.com,布布扣


四、
awk 内置字符串函数

 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的后缀部分

 

         1、将文本中“48”更改成“32

        awk ‘gsub(/48/,32) {print $0}‘ grade.txt

             bubuko.com,布布扣 
 

         2、查询“green”中的n在第几个位置

       awk ‘BEGIN{print index("green","n")}‘ grade.txt
  bubuko.com,布布扣
   注:如
BEGIN若不加,则每行都回显示5

 

         3、计算第一列字符串长度并用连接符连接

       awk ‘{print length($1)"--------"$1}‘ grade.txt

            bubuko.com,布布扣 
 

         4、若第一列中含有“l”则告知位置,若没有则返回0

                awk ‘{print match($1,"l")"------" $1}‘ grade.txt

             bubuko.com,布布扣 
 

         5、只列出第一个域中35位字符串

                awk ‘{print substr($1,3,3)}‘ grade.txt

              bubuko.com,布布扣 

 

 

本文出自 “上尚若水” 博客,谢绝转载!

AWK用法,布布扣,bubuko.com

AWK用法

原文:http://cntwei.blog.51cto.com/6446272/1376629

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!