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

Linux之awk

时间:2014-08-26 03:08:36      阅读:326      评论:0      收藏:0      [点我收藏+]

标签:awk

  

一:awk为报告生成器


bubuko.com,布布扣

bubuko.com,布布扣

bubuko.com,布布扣

AWK字段:awk对每行文档按照分隔符把行内的内容切成每个字段。

$0:代表整行。

$1...$N:代表被分割符分开的每个字段。


二:awk基本语法

基本语法:awk [options] ‘program‘ file file ...

                  awk [options] ‘PATTERN{action}‘ file file ...


输入选项: -F  指定分割符选项。

                 awk   -F :    ‘ {print  $1 ,$7} ‘  /etc/passwd     #指定以冒号作为字段分割符。


PATTERN: awk的输出

                  print item1, item2, ........

 要点:
 (1) 各项目之间使用逗号分隔,而输出时则使用输出分隔符分隔;
 (2) 输出的各item可以字符串或数值、当前记录的字段、变量或awk的表达式;数值会被隐式转换为字符串后输    出;

 (3) print后面item如果省略,相当于print $0输出整串内容;要想后面输出空白,使用pirnt " " (在awk中输出

子串要使用双引号);

 

awk的变量:内置变量,自定义变量

   

          内置变量:输入时的字段分隔符 (awk的内置变量前要用BEGIN)

                     FS:Field Seperator, 输入时的字段分隔符

          #  awk ‘BEGIN{FS=":"}{print $1,$7}‘ /etc/passwd      #内置变量的引用要用到双引号

                     RS:Record Seperator, 输入行分隔符

#  awk ‘BEGIN{RS=":"}{print }‘ /etc/passwd   #会把冒号分开的内容当作每一行来处理

bubuko.com,布布扣

OFS: Output Field Seperator, 输出时的字段分隔符
     #  awk ‘BEGIN{FS=":";OFS=":"}{print $1,$7}‘ /etc/passwd     #语句与语句之间要用分号分割 (红色部分)

bubuko.com,布布扣

     ORS: Outpput Row Seperator, 输出时的行分隔符

         

bubuko.com,布布扣

 

    NF:Numbers of Field,字段数    #取最后一个字段还可用$NF

        

    NR:Numbers of Record, 行数如果后面跟有多个文件的话那么就是所有文件的一并计数;

       # awk ‘BEGIN{FS=":";OFS=":"}{print NR $1,$7}‘ /etc/passwd /etc/group


bubuko.com,布布扣

         FNR:行数;各文件分别计数

         # awk ‘BEGIN{FS=":";OFS=":"}{print FNR $1,$7}‘ /etc/passwd

bubuko.com,布布扣

     ARGV:数组,保存命令本身这个字符,awk ‘{print $0}‘ 1.txt 2.txt,意味着ARGV[0]保存awk,

    # awk ‘BEGIN{print ARGV[0],ARGV[1],ARGV[2],ARGC}‘ /etc/passwd /etc/group

bubuko.com,布布扣

     ARGC: 保存awk命令中参数的个数

         自定义变量:输入时的字段分隔符 (awk的内置变量前要用BEGIN

  -v var_name=VALUE   变量名区分字符大小写

  (1) 可以program中定义变量;

  (2) 可以命令行中通过-v选项自定义变量;


 # awk ‘BEGIN{a="hello awk"}{print a}‘ /etc/passwd

bubuko.com,布布扣


       #awk ‘BEGIN{a="hello awk";print a}‘  #可以不跟文件  直接输出hello awk


       #awk -v a="hello awk" ‘BEGIN{print a}‘    #直接输出hello awk


 awk的printf命令


命令的使用格式:printf format, item1, item2,...


要点:

  (1) 要指定format;

  (2) 不会自动换行;如需换行则需要给出\n

  (3) format用于为后面的每个item指定其输出格式;


format格式的指示符都%开头,后跟一个字符:

   %c: 显示字符的ASCII码;

   %d, %i: 十进制整数;

   %e, %E: 科学计数法显示数值;

   %f: 显示浮点数;

   %g, %G: 以科学计数法格式或浮点数格式显示数值;

   %s: 显示字符串;

   %u: 显示无符号整数;

   %%: 显示%自身;

  修饰符:

   #:显示宽度

   -:左对齐

   +:显示数值的符号

   .#: 取值精度


# awk -F: ‘{printf "%15s %-15s\n",$1,$7}‘ /etc/passwd

bubuko.com,布布扣

    # awk ‘BEGIN {printf "%f\n",3.1415}‘         #显示7个字节

bubuko.com,布布扣


        # awk ‘BEGIN {printf "%f\n",3.1415926}‘     #总位数超过8位,小数点后面要进行四舍五入

bubuko.com,布布扣

   # awk ‘BEGIN {printf "%15.2f\n",3.1415926}‘    #15.2 表示整体为15个位宽加小数点后两位

bubuko.com,布布扣

awk输出重定向


  print items > output-file

  print items >> output-file

  print items | command

  特殊文件描述符:

  /dev/stdin: 标准输入

  /dev/stdout: 标准输出

  /dev/stderr: 错误输出

awk的操作符

          

算术操作符:

   x+y

   x-y

   x*y

   x/y

   x**y, x^y

   x%y

   -x:负值

   +x:转换为数值

  字符串操作符:连接

  赋值操作符:

   =

   +=

   -=

   *=

   /=

   %=

   ^=

   **=

   ++

   --

   如果模式自身是=号,要写为/=/

  比较操作符:

   <

   <=

   >

   >=

   ==

   !=

   ~:模式匹配,左边的字符串能够被右边的模式所匹配为真,否则为假;

   !~:

  逻辑操作符:

   &&: 与

   ||:或

  条件表达式:

  selector?if-true-expression:if-false-expression

  # awk -F: ‘{$3>=500?utype="common user":utype="admin or system user";print $1,"is",utype}‘ /etc/passwd

  函数调用:

  function_name(argu1,argu2)

                


本文出自 “slayer” 博客,请务必保留此出处http://slayer.blog.51cto.com/4845839/1544885

Linux之awk

标签:awk

原文地址:http://slayer.blog.51cto.com/4845839/1544885

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