• awk,gawk基本用法笔记221107


    AWK是一种编程语言。AWK 有几种实现方式(主要以解释器的形式)。AWK已被编入POSIX中。今天使用的主要实现是:

    • nawk(“ new awk”,oawk原始UNIX实现的演变),已在* BSD上使用,并在Linux上广泛使用;
    • mawk,主要是坚持标准功能的快速实现;
    • gawk,GNU实现,具有许多扩展;
    • 在 Busybox的(小,适用于嵌入式系统,功能也不多)。

    如果您只关心标准功能,请致电awk,它可以是gawk或nawk或mawk或其他实现。如果要使用GNU awk中的功能,请使用gawk或Perl或Python。

    我的理解是: awk是将文本逐行筛选, 再将筛选行按(用-F指定的)分割符拆分成多列, 进行处理

    基本格式
    awk [选项] # 可以没有
    '单引号开始
    BEGIN{ BEGIN语句块代码 }
    /表达式/{表达式语句块代码} 
    /表达式2/{表达式语句块代码} 
    /表达式n/{表达式语句块代码} 
    END{END语句块代码}
    单引号结束'
    文件1,文件2...文件n # 如果有表达式块,就要有输入, 输入可以用重定向或文件 , 文件不能写在单引号内
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    只用BEGIN{}语句块的话,可以不要输入流, 否则都要有输入流

    几种简单用法

    例1 : 查看包含"root"字符串的行

    sudo awk /root/{print} /etc/passwd
    
    • 1

    👆效果如同👇

    sudo grep root /etc/passwd
    
    • 1

    👆效果如同👇

    sudo awk '/root/{print $0}' /etc/passwd
    
    • 1

    例2

    awk 'BEGIN{print "hello world"}'
    
    • 1

    如果语句块中有空格,就要用引号包住

    例3

    echo hello | awk {print}
    
    • 1

    例4

    echo -e "world\n你" | awk '
    	BEGIN { print "hello " }
    	/wo/{print}
    	/你/{print}
    	END { print "好" } 
    '
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    例5

    awk '
    	BEGIN{print "hello"} BEGIN{print "world"}
    	BEGIN{print "世界"} BEGIN{print "你好"}
    '
    
    • 1
    • 2
    • 3
    • 4

    例6 : print 等效 print $0

    sudo awk /root/{print} /etc/passwd
    
    • 1
    sudo awk '/root/{print $0}' /etc/passwd
    
    • 1



    选项

    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

    4个好记的常用选项: 大F , 小f , 大V , 小v
    • -F 指定分隔符, 不指定的话, 默认是 空格 和 tab(\t)
    • -f 指定文件, 可以省略, 文件路径全名写在最后即可
    • -v 指定awk自己的变量
    • -V 查看版本



    awk , nawk , mawk , gawk

    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的。



  • 相关阅读:
    Yolov5(v5.0) + pyqt5界面设计
    【微服务】RabbitMQ的粗浅入门
    WKWebView加载Web本地项目实践(Swift)
    springboot证书管理系统的设计与实现毕业设计源码162317
    C51 git忽略文件.gitignore
    思科大作业
    2022-09-09 Unity InputSystem3——InputAction
    VUE element-ui之form表单中input输入超过规定长度error提醒,并实时显示输入长度,可无限输入
    【一文秒懂】Ftrace系统调试工具使用终极指南
    Android NDK 在Linux下使用mk文件生成SO库
  • 原文地址:https://blog.csdn.net/kfepiza/article/details/127724039