shell脚本-awk

Posted hmm01031007

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell脚本-awk相关的知识,希望对你有一定的参考价值。

一、awk工作原理

 

二、awk的用法

 awk [option] ... ‘program‘ FILE ...
    1、program语句必须使用单引号!
    2、多条program语句使用用大括号包含起来,可以并列,可以嵌套
三、awk的常用参数

 -F   #指定分隔符

 示例:awk -F: ‘print $1‘ /etc/passwd     #输出/etc/passwd/文件中以:为分隔符的第一列

    技术图片

   -v    #因为awk是一种语言编译器,能自己定义变量,同时也有自己的内置变量(与shell中的环  变量类似),所以要手动指定变量参数。

 示例:awk -v a="a+b" ‘print a‘ test.txt     #给a复制,打印a这个变量(在awk中调用变量不需要 加$符)

   技术图片

 技术图片

四、awk的语法格式

 1.print     #默认输出

  在awk中没有保存的命令,我们可以关联别的命令来保存awk的结果

  示例:awk ‘a="a+b";print a‘ test.txt | tee a.txt

  技术图片

 2.printf   #实现格式化输出

  示例:printf "%s是%d班学习最棒的",变量1,变量2

  (1)格式符

       %s   字符串
            %d  %i  数值
            %e  %E  科学计算数值
            %c  ACSii码值
            %f   浮点数
            %u  无符号整数
            %%  逃逸符 只显示 % 自己

    (2)修饰符

    默认为右对齐

    -  代表左对齐

    %5.4f    #5代表所占的位数,4代表所取的小数位

  3.变量

  变量分为内置变量和自定义变量

  内置变量是awk语言所默认支持的变量

  变量:

    FS      #定义输入分割符的变量

    OFS    #定义输出分隔符的变量

    NF       #定义行分隔以后的参数个数($NF 分隔以后最后的一列变量)

  示例:awk -v FS=":" ‘/\\/bash$/print $1,$NF‘ /etc/passwd    

 技术图片

            NR  定义文件的行数,定义多个文件的文件的,行号叠加
            FNR  文件只计算自己的行号

  示例:awk ‘print NR‘ /etc/fstab /etc/passwd

 技术图片
            awk ‘print FNR‘ /etc/fstab /etc/passwd 

  技术图片

      FILENAME 存储文件的名字

   示例:awk ‘print FILENAME‘ /etc/passwd    #把文件名打印N次,N文件的行数

  技术图片

  BEGIN语句 只在行循环开始时,执行一次;

  示例:awk ‘BEGINprint FILENAME‘ /etc/passwd

  

以上是关于shell脚本-awk的主要内容,如果未能解决你的问题,请参考以下文章

shell批量执行多个shell脚本

shell脚本翻译 急求

shell脚本书写方法

如何在shell脚本里调用另一个shell脚本

shell脚本获取参数&在线执行shell脚本

shell脚本中#是啥意思