• awk:gawk,mawk,nawk的选项笔记221109


    awk的选项

    通用常用选项,

    • -F 指定分隔符
    • -f 指定脚本文件 (注意:是脚本文件, 不是输入文件, 输入文件写在末尾)
    • -v 定义awk自己的变量, 例如 -v name=小明

    这三个选项符合 POSIX 规范

    来自fedora36👇

    Usage: awk [POSIX or GNU style options] -f progfile [--] file ...
    Usage: awk [POSIX or GNU style options] [--] 'program' file ...
    POSIX options:          GNU long options: (standard)
            -f progfile             --file=progfile
            -F fs                   --field-separator=fs
            -v var=val              --assign=var=val
    Short options:          GNU long options: (extensions)
            -b                      --characters-as-bytes
            -c                      --traditional
            -C                      --copyright
            -d[file]                --dump-variables[=file]
            -D[file]                --debug[=file]
            -e 'program-text'       --source='program-text'
            -E file                 --exec=file
            -g                      --gen-pot
            -h                      --help
            -i includefile          --include=includefile
            -I                      --trace
            -l library              --load=library
            -L[fatal|invalid|no-ext]        --lint[=fatal|invalid|no-ext]
            -M                      --bignum
            -N                      --use-lc-numeric
            -n                      --non-decimal-data
            -o[file]                --pretty-print[=file]
            -O                      --optimize
            -p[file]                --profile[=file]
            -P                      --posix
            -r                      --re-interval
            -s                      --no-optimize
            -S                      --sandbox
            -t                      --lint-old
            -V                      --version
    
    To report bugs, see node `Bugs' in `gawk.info'
    which is section `Reporting Problems and Bugs' in the
    printed version.  This same information may be found at
    https://www.gnu.org/software/gawk/manual/html_node/Bugs.html.
    PLEASE do NOT try to report bugs by posting in comp.lang.awk,
    or by using a web forum such as Stack Overflow.
    
    gawk is a pattern scanning and processing language.
    By default it reads standard input and writes standard output.
    
    Examples:
            awk '{ sum += $1 }; END { print sum }' file
            awk -F: '{ print $1 }' /etc/passwd
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    gawk的选项

    来自Fedora36👇

    Usage: gawk [POSIX or GNU style options] -f progfile [--] file ...
    Usage: gawk [POSIX or GNU style options] [--] 'program' file ...
    POSIX options:          GNU long options: (standard)
            -f progfile             --file=progfile
            -F fs                   --field-separator=fs
            -v var=val              --assign=var=val
    Short options:          GNU long options: (extensions)
            -b                      --characters-as-bytes
            -c                      --traditional
            -C                      --copyright
            -d[file]                --dump-variables[=file]
            -D[file]                --debug[=file]
            -e 'program-text'       --source='program-text'
            -E file                 --exec=file
            -g                      --gen-pot
            -h                      --help
            -i includefile          --include=includefile
            -I                      --trace
            -l library              --load=library
            -L[fatal|invalid|no-ext]        --lint[=fatal|invalid|no-ext]
            -M                      --bignum
            -N                      --use-lc-numeric
            -n                      --non-decimal-data
            -o[file]                --pretty-print[=file]
            -O                      --optimize
            -p[file]                --profile[=file]
            -P                      --posix
            -r                      --re-interval
            -s                      --no-optimize
            -S                      --sandbox
            -t                      --lint-old
            -V                      --version
    
    To report bugs, see node `Bugs' in `gawk.info'
    which is section `Reporting Problems and Bugs' in the
    printed version.  This same information may be found at
    https://www.gnu.org/software/gawk/manual/html_node/Bugs.html.
    PLEASE do NOT try to report bugs by posting in comp.lang.awk,
    or by using a web forum such as Stack Overflow.
    
    gawk is a pattern scanning and processing language.
    By default it reads standard input and writes standard output.
    
    Examples:
            gawk '{ sum += $1 }; END { print sum }' file
            gawk -F: '{ print $1 }' /etc/passwd
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46

    来自Ubuntu22.04Server版👇

    Usage: awk [POSIX or GNU style options] -f progfile [--] file ...
    Usage: awk [POSIX or GNU style options] [--] 'program' file ...
    POSIX options:          GNU long options: (standard)
            -f progfile             --file=progfile
            -F fs                   --field-separator=fs
            -v var=val              --assign=var=val
    Short options:          GNU long options: (extensions)
            -b                      --characters-as-bytes
            -c                      --traditional
            -C                      --copyright
            -d[file]                --dump-variables[=file]
            -D[file]                --debug[=file]
            -e 'program-text'       --source='program-text'
            -E file                 --exec=file
            -g                      --gen-pot
            -h                      --help
            -i includefile          --include=includefile
            -l library              --load=library
            -L[fatal|invalid|no-ext]        --lint[=fatal|invalid|no-ext]
            -M                      --bignum
            -N                      --use-lc-numeric
            -n                      --non-decimal-data
            -o[file]                --pretty-print[=file]
            -O                      --optimize
            -p[file]                --profile[=file]
            -P                      --posix
            -r                      --re-interval
            -s                      --no-optimize
            -S                      --sandbox
            -t                      --lint-old
            -V                      --version
    
    To report bugs, see node `Bugs' in `gawk.info'
    which is section `Reporting Problems and Bugs' in the
    printed version.  This same information may be found at
    https://www.gnu.org/software/gawk/manual/html_node/Bugs.html.
    PLEASE do NOT try to report bugs by posting in comp.lang.awk,
    or by using a web forum such as Stack Overflow.
    
    gawk is a pattern scanning and processing language.
    By default it reads standard input and writes standard output.
    
    Examples:
            awk '{ sum += $1 }; END { print sum }' file
            awk -F: '{ print $1 }' /etc/passwd
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    mawk的选项

    来自Ubuntu22.04Desktop版👇

    Usage: mawk [Options] [Program] [file ...]
    
    Program:
        The -f option value is the name of a file containing program text.
        If no -f option is given, a "--" ends option processing; the following
        parameters are the program text.
    
    Options:
        -f program-file  Program  text is read from file instead of from the
                         command-line.  Multiple -f options are accepted.
        -F value         sets the field separator, FS, to value.
        -v var=value     assigns value to program variable var.
        --               unambiguous end of options.
    
        Implementation-specific options are prefixed with "-W".  They can be
        abbreviated:
    
        -W version       show version information and exit.
        -W dump          show assembler-like listing of program and exit.
        -W help          show this message and exit.
        -W interactive   set unbuffered output, line-buffered input.
        -W exec file     use file as program as well as last option.
        -W random=number set initial random seed.
        -W sprintf=number adjust size of sprintf buffer.
        -W posix_space   do not consider "\n" a space.
        -W usage         show this message and exit.
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    来自Ubuntu22.04Server版👇

    Usage: mawk [Options] [Program] [file ...]
    
    Program:
        The -f option value is the name of a file containing program text.
        If no -f option is given, a "--" ends option processing; the following
        parameters are the program text.
    
    Options:
        -f program-file  Program  text is read from file instead of from the
                         command-line.  Multiple -f options are accepted.
        -F value         sets the field separator, FS, to value.
        -v var=value     assigns value to program variable var.
        --               unambiguous end of options.
    
        Implementation-specific options are prefixed with "-W".  They can be
        abbreviated:
    
        -W version       show version information and exit.
        -W dump          show assembler-like listing of program and exit.
        -W help          show this message and exit.
        -W interactive   set unbuffered output, line-buffered input.
        -W exec file     use file as program as well as last option.
        -W random=number set initial random seed.
        -W sprintf=number adjust size of sprintf buffer.
        -W posix_space   do not consider "\n" a space.
        -W usage         show this message and exit.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26




    AWK介绍

    简介:
    AWK是一种解释性编程语言,主要用于文本处理。之所以叫AWK是因为其取了三位创始人Alfred Aho,Peter Weinberger,和Brian Kernighan 的 Family Name 的首字符。

    GNU/Linux发布的AWK目前由自由软件基金会(FSF)进行开发和维护,通常也称它为GNU AWK。

    AWK的几个实现:

    1. AWK:原先来源于AT&T实验室的的AWK;
      AT&T(American Telephone & Telegraph的缩写 是一家美国电信公司)
    2. NAWK:AT&T实验室的AWK的升级版;
    3. GAWK:这就是GNU AWK;
    4. MAWK:一种轻巧快速的AWK实现。
    AWK介绍1
    各种AWK版本

    当前使用的AWK有三个主要版本,并且它们都符合POSIX标准(至少对于绝大多数用例而言,足够接近)。

    • 第一个是经典awk,它是 Aho,Weinberger , Kernighan (3个人) 在他们的《 AWK编程语言》一书中描述的AWK版本。有时称为 “新AWK”(nawk)或 “一个真正的AWK”,现在托管在GitHub上。这是许多基于BSD的系统(包括macOS)上预先安装的版本(尽管macOS随附的版本已过时,需要升级)。

    • 第二个是GNU Awk(gawk),它是迄今为止功能最强大,维护最活跃的版本。Gawk通常预先安装在Linux系统上,并且通常是默认的awk。使用Homebrew可以很容易地在macOS上安装,Gawk还提供Windows二进制文件。自1994年以来,Arnold Robbins一直是gawk的主要维护者,并继续推广该语言(他还为经典的awk版本做出了许多修复)。Gawk具有awk或POSIX标准中未提供的许多功能,包括新函数,联网功能,C扩展API,事件探查器和调试器以及最近的名称空间。

    • 第三个通用版本是mawk,由Michael Brennan编写。它是Ubuntu和Debian Linux上的默认awk,并且仍然是AWK的最快版本,具有字节码编译器和更节省内存的值表示形式。(从4.0开始,Gawk也使用了字节码编译器,因此它现在已经接近mawk的速度。)

    如果你想将AWK用于单行和基本文本处理,则上述任何方法都是不错的选择。如果你打算将其用于较大的脚本或程序,Gawk的功能使其成为明智的选择。

    AWK的其他几种实现也具有不同的成熟度和维护级别。值得注意的有这些:嵌入式Linux环境中使用的尺寸优化的BusyBox版本,支持运行时访问Java语言的Java版以及我自己用Go编写的GoAWK(与POSIX兼容的版本)。三个主要的AWK和BusyBox版本都用C编写。


    AWK是否仍然有意义?

    AWK是否仍然有用这个问题,就像在问空气是否有用一样:你可能看不到它,但周围无处不在。许多Linux管理员和DevOps工程师使用它来转换数据或通过日志文件诊断问题。几乎所有基于Unix的计算机上都安装了AWK版本。除了临时使用外,许多大型开源项目还在其构建或文档工具中使用AWK。仅举几个例子:Linux内核在x86工具中使用它来检查 和重新格式化 objdump文件,Neovim使用它来生成文档,而FFmpeg使用它来进行构建和测试。

    即使人们不再想看到AWK,AWK构建脚本也很难被杀死:2018年,LWN 写了一篇文章,是关于GCC贡献者想要用Python替换AWK脚本来生成其选项解析代码。这个建议在当时有一些支持,但显然没有人主动要求做实际的移植,现在AWK脚本依然存在。

    Robbins在他的2018年论文中主张将AWK(特别是gawk)用作“系统编程语言”,在这种情况下,其含义是用于编写较大的工具和程序的语言。他概述了他认为尚未流行的原因,但Kernighan“ 并非100%确信 ”缺乏扩展机制是AWK不被大型程序广泛使用的主要原因。他建议,这可能是由于缺乏对访问系统调用等内容的内置支持。但是,这些都没有阻止几个人开发更大的工具:Robbins自己编写的TexiWeb Jr.识字编程工具(1300行AWK),Werner Stoop的d.awk工具用于从源码中备注的MarkDown生成文档, Translate Shell是一个6000行AWK工具,可为基于云的翻译API提供相当强大的命令行界面。

    过去几年中,有几位开发人员写过关于在其“大数据”工具包中使用AWK的信息,它比重型分布式计算系统(如Spark和Hadoop)简单得多(有时更快)。Nick Strayer 撰写了 有关使用AWK和R解析多个内核中25 TB数据的文章。其他大数据示例包括Adam Drake 写的标题颇为诱人的文章:“命令行工具可以比Hadoop集群快235倍”,以及Brendan O’Connor的“ 不要使用MAWK,AWK是最快,最优雅的大数据处理语言”。

    命令行工具可以比Hadoop集群快235倍 ???

    总而言之,在临时文本修改,构建工具,“系统编程”和大数据处理之间(更不用说文本模式的第一人称射击游戏),AWK似乎在2020年还活得很好。



    AWK介绍2

    awk 是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入、一个或多个文件,或其它命令的输出(即管道)。它支持用户自定义函数和 动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。

    awk的处理文本和数据的方式是这 样的,它逐行扫描文件,从第一行到最后一行,寻找匹配的特定模式的行,并在这些行上进行你想要的操作。如果没有指定处理动作,则把匹配的行显示到标准输出 (屏幕),即默认处理动作是print;如果没有指定模式,则所有被操作所指定的行都被处理,即默认指定模式是全部。awk分别代表其作者姓氏的第一个字母。因为它的作者是三个人,分别是Alfred Aho、Brian Kernighan、Peter Weinberger。gawk是awk的GNU版本,它提供了Bell实验室和GNU的一些扩展。

    像shell一样,awk也有好几种,常见的如awk、nawk、mawk、gawk,其中
    awk:最初在1 9 7 7年完成,1 9 8 5年发表了一个新版本的awk,它的功能比旧版本增强了不少,awk 能够用很短的程序对文档里的资料做修改、比较、提取、打印等处理,如果使用C 或P a s c a l 等语言编写程序完成上述的任务会十分不方便而且很花费时间,所写的程序也会很大;

    nawk: 在 20 世纪 80 年代中期,对 awk语言进行了更新,并不同程度地使用一种称为 nawk(new awk) 的增强版本对其进行了替换。许多系统中仍然存在着旧的awk 解释器,但通常将其安装为 oawk (old awk) 命令,而 nawk 解释器则安装为主要的 awk 命令,也可以使用 nawk 命令。Dr. Kernighan 仍然在对 nawk 进行维护,与 gawk 一样,它也是开放源代码的,并且可以免费获得;

    mawk:mawk 是 awk 编程语言的解释器。awk语言在多媒体数据文件以及文本的检索和处理,算法的原型设计和试验都有广泛的使用。mawk带给awk新的概念,它实现了在《The AWK Programming Language》(Aho, Kernighan and Weinberger, The AWK Programming Language, Addison-Wesley Publishing, 1988.被认为是 AWK 手册。)中定义的 awk语言。mawk遵循 POSIX 1003.2 (草案 11.3)定义的 AWK 语言,包含了一些没有在AWK 手册中提到的特色,同时 mawk 提供一小部分扩展,另外据说mawk是实现最快的awk;

    gawk: 是 GNU Project 的awk解释器的开放源代码实现。尽管早期的 GAWK 发行版是旧的 AWK 的替代程序,但不断地对其进行了更新,以包含 NAWK 的特性;
    目前,大家都比较倾向于使用awk和gawk。Ubuntu系统中的各种awk的选项设置,可以通过sudo update-alternatives --config awk来完成,实际上你通过手动修改软链接也能实现。Debian最小化安装的时候awk的链接是指向mawk的。

    sudo update-alternatives --config awk
    
    • 1

    GAWK gawk 5 新特性

    GNU Awk 5.0.0 发布了,Awk(Gawk)是一种编程语言,用于在 Linux/unix 下对文本和数据进行处理。数据可以来自标准输入、文件或其它命令的输出。它支持用户自定义函数和动态正则表达式等功能。

    这是一个重要的新版本,带来了一些新功能和功能改进,最大的亮点是实现了命名空间。相比 4.2.1,变化包括:

    • 添加了对 POSIX 标准 %a 和 %A 输出格式的支持。
    • 测试基础结构得到了极大的改进,简化了 test/Makefile.am 的内容,并且可以从 test/Makefile.in 生成 pc/Makefile.tst。
    • 正则表达式例程已经被 GNULIB 中的例程取代。
    • 基础设施升级:Bison 3.3、Automake 1.16.1、Gettext 0.19.8.1、makeinfo 6.5。
    • 删除了未记录的配置选项和允许在标识符中使用非英语“字母”的代码。
    • 删除了 `–with-whiny-user-strftime’ 配置选项现在已经消失。
    • 更好地适应 C99 环境。
    • PROCINFO[“platform”] 产生一个字符串,表示编译 gawk 的平台。
    • 写入不是变量名的 SYMTAB 元素现在会导致致命错误。
    • pretty-printer 中的注释处理几乎完全从头开始重新设计,以往无法支持的许多极端情况中的注释现在可以格式化中输出。
    • 已经实现命名空间。命令行程序段现在必须都是自包含的句法单元,比如现在不能这么写:gawk -e ‘BEGIN {’ -e ‘print “hello” }’
    • 现在使用语言环境设置来忽略单字节语言环境中的大小写,而不是使用 Latin-1 中的硬连线法。
    • 修复了一些 bug,包括特别重要的 bug。



    awk 执行流程图
    Created with Raphaël 2.3.0 执行 AWK 的 BEGIN{}语句块 的命令 从 输入流(开头管道或末尾文件) 读取一行 用表达式筛选该行, 执行表达式语句块的命令 例1{print} , 例2/pattern/{print "hello"} , 例3 $n!~/pattern/{代码} 是否读取完最后一行 执行 AWK 的 END{}语句块 的命令 yes no

    请添加图片描述

    没有读取完
    执行AWK的 BEGIN语句块 的命令
    从 输入流 读取一行
    用表达式筛选该行,
    执行表达式语句块块的命令
    是否读取完最后一行
    执行AWK的 END语句块 的命令

    在这里插入图片描述

  • 相关阅读:
    Spring @Autowired 注解静态变量
    USB3.0:VL817Q7-C0的LAYOUT指南(三)
    [AI]大模型稳定角色扮演形成“自我认知”
    react倒计时功能
    docker镜像与容器基本的基本操作(三)
    WPF 控件专题 Menu 控件详解
    Timeline 时间线自定义节点为Checkbox
    结构设计模式 - 桥接设计模式 - JAVA
    C++打印CPU和内存实时使用情况
    MySQL1——喵喵期末不挂科
  • 原文地址:https://blog.csdn.net/kfepiza/article/details/127762034