Linux shell编程学习笔记46:awk命令的由来、功能、格式、选项说明、版权、版本

本文主要是介绍Linux shell编程学习笔记46:awk命令的由来、功能、格式、选项说明、版权、版本,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

0 前言

在编写Linux Shell脚本的过程中,我们经常要对Linux命令执行的结果进行分析和提取,Linux也在文本分析和提取这方面提供了不少的命令。比如我们之前研究过的cut命令。

Linux shell编程学习笔记43:cut命令icon-default.png?t=N7T8https://blog.csdn.net/Purpleendurer/article/details/135730679?spm=1001.2014.3001.5501

除了cut命令,我们还需要继续研究其他相关的命令。

今天我们先研究 awk命令。

1 awk命令的由来

AWK 命令是取了三位创建人  Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 姓氏(Family Name) 的首字符来构成。

实际上 AWK 拥有自己的程序设计语言 ——“样式扫描和处理语言”,这种语言允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。

2 awk命令的功能、格式和选项说明

我们可以使用 awk --help命令查看 awk 命令的帮助信息。

purpleEndurer @ bash ~ $ awk --help
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=pro

To report bugs, see node `Bugs' in `gawk.info', which is
section `Reporting Problems and Bugs' in the printed version.

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

purpleEndurer @ bash ~ $ 

2.1 awk命令的功能

awk是处理文本文件的一个应用程序,它依次处理文件的每一行,并读取里面的每一个字段。

对于日志、CSV 那样的每行格式相同的文本文件,awk可能是最方便的工具。

2.2 awk命令的格式

awk [选项] -f 脚本文件 [--] 文件 ...

 或

awk [选项] [--] '程序' 文件 ...

2.3 awk命令的选项

POSIX 选项GNU 长选项: (标准 )功能备注
-f progfile--file=progfile

从脚本文件中读取awk程序源代码,而不是从第一个 非选项 参数中读取。此选项可以多次给出;AWK 程序由每个指定源文件的内容串联组成。

以 -f 命名的文件被视为开头有“@namespace ”awk“。
-F fs--field-separator=fs指定输入文件折分符,fs是一个字符串或者是一个正则表达式,如-F
-v var=val--assign=var=val在程序开始执行之前,将变量 var 设置为值 val

此类变量值在 BEGIN 规则中可用。

使用 -v 设置内置变量的值可能会导致令人惊讶的结果。AWK 将根据需要重置这些变量的值,可能会忽略您可能给出的任何初始值。

短选项GNU长选项: (扩展)功能
-b--characters-as-bytes

使 gawk 将所有输入数据视为单字节字符。此外,所有使用 print 或 printf 写入的输出都被视为单字节字符。

通常,gawk 遵循 POSIX 标准,并尝试根据当前语言环境处理其输入数据。这通常涉及将多字节字符转换为宽字符(内部),如果输入数据不包含有效的多字节字符,则可能会导致问题或混淆。此选项是告诉 gawk “放开我的数据!“

-c--traditional指定兼容模式,在该模式下,禁用 awk 语言的 GNU 扩展,以便 gawk 的行为与 BWK 一样
-C--copyright打印版权信息
-d[file]--dump-variables[=file]

将全局变量、其类型和最终值的排序列表打印到文件中。如果未提供任何文件,此列表将打印到当前目录中名为 awkvars.out 的文件中。

如果提供了 file,则 -d 和 file 之间不允许有空格。

-e 'program-text'--source='program-text'

使用program-text作为源代码,可与-f命令混用。

此选项允许您将文件中的源代码与您在命令行中输入的源代码混合使用。

当您要从命令行程序使用的库函数时,这特别有用

-E file--exec=file

与 -f 类似,从文件中读取 awk 程序文本。

与 -f 有两个区别:

此选项终止选项处理;命令行上的任何其他内容都直接传递给 AWK 程序。
不允许使用“var=value”形式的命令行变量赋值。

对于通过 URL 传递参数的万维网 CGI 应用程序,此选项尤其必要。用此选项可防止恶意(或其他)用户将选项、分配或 awk 源代码(通过 -e)传递给 CGI 应用程序。

 此选项应与 '#!' 脚本一起使用(请参阅可执行 awk 程序),如下所示:

#!/usr/local/bin/gawk -E

-g--gen-pot分析源程序,并在标准输出上为所有标记为翻译的字符串常量生成一个 GNU gettext 可移植对象模板文件
-h--help显示帮助信息
-L [fatal]--lint[=fatal]

警告可疑或不可移植到其他 awk 实现的构造。如果提供了值,则 -L 和值之间不允许有空格。当 gawk 第一次读取您的程序时,会发出一些警告。其他的则在运行时发出,因为程序正在执行。

-n--non-decimal-data

启用输入数据中八进制和十六进制值的自动解释。

注意:此选项可能会严重破坏旧程序。请小心使用。另请注意,此选项可能会在 gawk 的未来版本中消失。

-O--optimize

启用 gawk 对程序内部表示的默认优化。目前,这仅包括简单的恒定折叠。

默认情况下,优化处于启用状态。此选项主要用于向后兼容。但是,它可用于取消早期 -s 选项的效果(请参阅此列表的后面部分)。

-p[file]--profile[=file]

启用 awk 程序的分析。

暗示 --no-optimize。默认情况下,配置文件在名为 awkprof.out 的文件中创建。可选的 file 参数允许您为配置文件指定不同的文件名。如果提供了 file,则 -p 和 file 之间不允许有空格。

配置文件在左边距包含程序中每个语句的执行计数,以及每个函数的函数调用计数。

-P--posix打开兼容模式。但有以下限制,不识别:/x、函数关键字、func、换码序列以及当fs是一个空格时,将新行作为一个域分隔符;操作符和=不能代替^和^=;fflush无效。
-r--re-interval允许间隔正则表达式的使用,参考(grep中的Posix字符类),如括号表达式[[:alpha:]]。
-S--sandbox禁用 system() 函数、使用 getline 的输入重定向、使用 print 和 printf 的输出重定向以及动态扩展。此外,不允许向 ARGV 添加 gawk 开始运行时不存在的文件名。当您想要从可疑来源运行 awk 脚本并需要确保脚本无法访问您的系统(指定的输入数据文件除外)时,这特别有用。
-t--lint-old打印关于不能向传统unix平台移植的结构的警告。
-V--version打印版本信息。

2.4 其它说明

几乎所有 Linux 系统都自带awk这个程序。

awk有3个不同版本: awk、nawk和gawk,如果没有作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本。

3 awk命令基本用法使用实例

3.1 awk -C:打印版权信息

purpleEndurer @ bash ~ $ awk -C
Copyright (C) 1989, 1991-2012 Free Software Foundation.

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program. If not, see http://www.gnu.org/licenses/.
purpleEndurer @ bash ~ $ 

3.2 awk -V:打印版本信息

purpleEndurer @ bash ~ $ awk -V
GNU Awk 4.0.2
Copyright (C) 1989, 1991-2012 Free Software Foundation.

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program. If not, see http://www.gnu.org/licenses/.
purpleEndurer @ bash ~ $ 

这篇关于Linux shell编程学习笔记46:awk命令的由来、功能、格式、选项说明、版权、版本的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/890987

相关文章

Mybatis 传参与排序模糊查询功能实现

《Mybatis传参与排序模糊查询功能实现》:本文主要介绍Mybatis传参与排序模糊查询功能实现,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、#{ }和${ }传参的区别二、排序三、like查询四、数据库连接池五、mysql 开发企业规范一、#{ }和${ }传参的

Linux中的计划任务(crontab)使用方式

《Linux中的计划任务(crontab)使用方式》:本文主要介绍Linux中的计划任务(crontab)使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、前言1、linux的起源与发展2、什么是计划任务(crontab)二、crontab基础1、cro

Python将博客内容html导出为Markdown格式

《Python将博客内容html导出为Markdown格式》Python将博客内容html导出为Markdown格式,通过博客url地址抓取文章,分析并提取出文章标题和内容,将内容构建成html,再转... 目录一、为什么要搞?二、准备如何搞?三、说搞咱就搞!抓取文章提取内容构建html转存markdown

Linux换行符的使用方法详解

《Linux换行符的使用方法详解》本文介绍了Linux中常用的换行符LF及其在文件中的表示,展示了如何使用sed命令替换换行符,并列举了与换行符处理相关的Linux命令,通过代码讲解的非常详细,需要的... 目录简介检测文件中的换行符使用 cat -A 查看换行符使用 od -c 检查字符换行符格式转换将

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1

Java实现文件图片的预览和下载功能

《Java实现文件图片的预览和下载功能》这篇文章主要为大家详细介绍了如何使用Java实现文件图片的预览和下载功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... Java实现文件(图片)的预览和下载 @ApiOperation("访问文件") @GetMapping("

Java并发编程必备之Synchronized关键字深入解析

《Java并发编程必备之Synchronized关键字深入解析》本文我们深入探索了Java中的Synchronized关键字,包括其互斥性和可重入性的特性,文章详细介绍了Synchronized的三种... 目录一、前言二、Synchronized关键字2.1 Synchronized的特性1. 互斥2.

Linux卸载自带jdk并安装新jdk版本的图文教程

《Linux卸载自带jdk并安装新jdk版本的图文教程》在Linux系统中,有时需要卸载预装的OpenJDK并安装特定版本的JDK,例如JDK1.8,所以本文给大家详细介绍了Linux卸载自带jdk并... 目录Ⅰ、卸载自带jdkⅡ、安装新版jdkⅠ、卸载自带jdk1、输入命令查看旧jdkrpm -qa