zoukankan      html  css  js  c++  java
  • AWK学习日记

    AWK是一种处理文本文件的语言,是一个强大的文本分析工具。

    工作流程:

    AWK遵循一个简单的工作流程:读取-》执行-》重复。
    ① awk从输入流(文件,管道,标准输入)读取一行,并将其存储在存储器(内存)中。
    
    ② 所有的awk命令一次提交输入。默认情况下awk执行命令每一行,但我们可以通过提供的模式限制。
    
    ③ 重复以上过程,一直到这个文件被处理完成。  

    程序结构:

    BEGIN 块
    以下是BEGIN块语法:
    
    BEGIN {awk-commands}
    在BEGIN块被在程序启动时执行,且只执行一次。这是一个很好的初始化变量的地方。 BEGIN是AWK关键字,因此它必须是大写。请注意,这个块是可选的。
    
    Body块
    以下是主体(Body)块的语法:
    
    /pattern/ {awk-commands}
    主体块适用于AWK的每个输入行命令。默认情况下AWK执行每一行命令,但可以通过提供的模式限制。请注意,没有主体块的关键字。
    
    END 块
    以下是END块的语法:
    
    END {awk-commands}
    END块被在程序结束时执行。END是AWK关键字,因此它必须是大写。请注意,此块也是可选的
    

      

    基本语法:

    awk [options] file .....

    awk [oprions] -f file ....
    file可以是一个包含awk命令的文件
    例如:
    awk '{print}' test.txt 命令为列出test.txt的内容
    可以将{print}写入文件test.awk
    执行 awk -f test.awk test.txt
    效果相同。

      

    AWK标准选项:

    -v 选项

    此选项分配一个只的变量,允许程序执行前分配。

    awk -v name=ck 'BEGIN {printf "name=%s
    ",name}'
    得到结果 name=ck

      

    --dump-variables[=file] 选项

    它打印全局变量和最终值到文件的一个排序列表。默认的文件是awkvars.out。

    awk -dump-variables ''
    cat awkvars.out
    

      

    --help 选项

    此选项将在标准输出的帮助信息。

    下面开始实例操作:

    以netstat命令中提取了如下信息作为用例:

    下面是最简单最常用的awk示例,其输出第一列和第四列,

       其中单引号中的被大括号括着的就是awk的语句,注意,其职能被单引号包含。

       其中$1...$n表示第几列。$0表示整个行

    过滤记录

    我们再来看看如何过滤记录(下面过滤条件为:第三列的值为0 && 第6列的值为LISTEN)

     

    其中的“==”为比较运算符。其他比较运算符:!=, >, <, >=, <=

    如果我们需要表头的话,我们可以引入内建变量NR:

     内建变量

    $0         当前记录(这个变量存放着整个行的内容)

    $1~$n     当前记录得第n个字段,字段由FS分割

    FS         输入字段分隔符 默认是空格或者Tab

    NF         当前记录中的字段个数,就是有多少列

    NR         记录读出的记录数,就是行号,从1开始如果有多个文件,这个值也不断累加。

    FNR        当前记录数,与NR不同的是这个值会是各个文件自己的行号

    RS          输入的记录分隔符,默认是换行符

    OFS        输出字段分隔符,默认空格

    ORS       输出记录分隔符,默认为换行符

    FILENAME  当前输入文件的名字

     上面的命令等价于:awk -F: '{print $1,$3,$6}' /etc/passwd

     如果要制定多个分隔符:awk -F '[;:]'

    再来看一个以 作为分隔符输出的例子(下面使用了/etc/passwd文件,这个文件是以:分隔的):

    转自:https://www.cnblogs.com/chenshoubiao/p/4773808.html

  • 相关阅读:
    Go语言如何判断是否是零值
    世界、中国大事记(古代时间线)
    微服务架构带来的分布式单体
    golang如何优雅的编写事务代码
    项目管理的一些知识
    高并发葵花宝典
    深度学习-常见神经网络
    教你用Cobra开发类似docker的命令行
    深度学习是什么
    人工神经网络是什么
  • 原文地址:https://www.cnblogs.com/oceanL/p/8459377.html
Copyright © 2011-2022 走看看