• Linux必知必会--awk


    弱者,是没有资格要求公平的。

              --《秦时明月》卫庄

    参考文献:

      http://www.ruanyifeng.com/blog/2018/11/awk.html 阮一峰

      https://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html

      https://man.linuxde.net/awk

      awk是一种优良的文本处理工具,linux及unix环境中现有的功能最强大的数据处理引擎之一。

      awk提供了极其强大的功能:可以进行正则表达式的匹配,样式装入,流控制,数学运算符,进程控制语句甚至于内置的变量和函数。它具备了一个完整的语言应该具有的几乎所有的精美特性。实际上awk的确拥有自己的语言:awk程序设计语言,三位创建者已将它正式定义为“样式扫描和处理语言”。它允许创建简短的程序,这些程序读取输入文件,为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他功能。

      最简单的说,awk是一种用于处理文本的编程语言工具。awk在很多方面类似于unix shell语言,尽管awk具有完全属于其本身的语法。(--取自wiki)

     

    语法

    awk [option] 'script' var = value file(s)

    awk [opyion] -f script var = value file(s)

    常用命令选项:

    -F fs fs指定输入分隔符,fs可以是字符串或正则表达式

    -v var=value  赋值一个用户定义的变量,将外部变量传递给awk

    -f scripfile  从脚本中读取awk命令

    -m[fr] val  对val值设置内在限制,-mf选项限制分配给val的最大块数目;-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。

    基本用法

    awk 动作 文件名

    示例:

    awk '{print $0}' demo.txt

    上方示例中,demo.txt是awk要处理的文件。前面单引号内部有一个大括号,里面就是每一行的处理动作print $0。其中print是打印命令,$0代表当前行,因此上面的执行结果,就是把每一行原样打印出来。

    awk会根据空格和制表符,将每一行分成若干字段,依次用$1,$2,$3代表第一个字段、第二个字段、第三个字段。

    echo 'This is a student' | awk '{print $3}'

    打印出a,a为第三个字段。

    如需要指定分割符,则要加上-F参数。

    示例:

    awk -F ';' '{print $1}' demo.txt

    变量

    $NF代表最后一个字段。

    echo 'this is a test' | awk '{print $NF}'

    $(NF-1)代表倒数第二个字段

    awk -F ':' '{print $1, $(NF-1)}' demo

    print命令里面的逗号,表示输出的时候,两部分之间使用空格分隔。

    NR表示当前处理的是第几行

    awk -F ':' '{print NR ") " $1}' demo

    print 命令中如果原样输出字符,要放在双引号里面。

    awk的其他内置变量如下

    FILENAME:当前文件名
    FS:字段分隔符,默认是空格和制表符。
    RS:行分隔符,用于分割每一行,默认是换行符。
    OFS:输出字段的分隔符,用于打印时分隔字段,默认为空格。
    ORS:输出记录的分隔符,用于打印时分隔记录,默认为换行符。
    OFMT:数字输出的格式,默认为%.6g。

    函数

    tolower():字符转为小写。
    length():返回字符串长度。
    substr():返回子字符串。
    sin():正弦。
    cos():余弦。
    sqrt():平方根。
    rand():随机数。

    条件

    awk '条件 动作' 文件名

    awk -F ':' '/usr/ {print $1}' demo.txt
    

    print命令前面是正则表达式,只输出包含user的行。

    awk -F ':' 'NR %2 = 1 {print $1}' demo.txt

    输出奇数行

    awk -F ':' 'NR >3 {print $1}' demo.txt

    输出第三行以后的行

    #输出第一个字段等于指定值的行
    $ awk -F ':' '$1 == "root" {print $1}' demo.txt
    root
    
    $ awk -F ':' '$1 == "root" || $1 == "bin" {print $1}' demo.txt
    root
    bin

    if语句

    awk -F ':' '{if ($1 > "m") print $1}' demo

    输出第一个字段的第一个字符大于m的行

    if可指定else部分

    awk -F ':' '{if ($1 > "m") print $1; else print "---"}' demo
  • 相关阅读:
    Convolutional Sequence to Sequence Learning 论文笔记
    机器阅读理解(看经典MRC模型与花式Attention)
    Attention机制概述
    文本分类(TextRNN/TextCNN/TextRCNN/FastText/HAN)
    三大特征提取器(RNN/CNN/Transformer)
    UniGUI的布局使用说明
    Delphi获取文件名、文件名不带扩展名、文件名的方法;delphi 获取文件所在路径
    DELPHI如何获取某目录下的所有文件名?
    Delphi 自带的字符串分割函数split
    delphi 拆分字符串
  • 原文地址:https://www.cnblogs.com/richered/p/11511828.html
Copyright © 2020-2023  润新知