• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >linux shell > 一天一个shell命令 linux文本内容操作系列-awk命令详解

一天一个shell命令 linux文本内容操作系列-awk命令详解

作者: 字体:[增加 减小] 来源:互联网

通过本文主要向大家介绍了linux shell awk,shell awk命令,awk 调用shell命令,shell awk,shell中awk等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

简介

awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本。
awk其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母。实际上 AWK 的确拥有自己的语言: AWK 程序设计语言 , 三位创建者已将它正式定义为“样式扫描和处理语言”。它允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。

使用方法

awk '{pattern + action}' {filenames}

尽管操作可能会很复杂,但语法总是这样,其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令。花括号({})不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。 pattern就是要表示的正则表达式,用斜杠括起来。

awk语言的最基本功能是在文件或者字符串中基于指定规则浏览和抽取信息,awk抽取信息后,才能进行其他文本操作。完整的awk脚本通常用来格式化文本文件中的信息。

通常,awk是以文件的一行为处理单位的。awk每接收文件的一行,然后执行相应的命令,来处理文本。

调用awk

有三种方式调用awk

说明:

awk被设计用于数据流,能够对列和行进行操作。而sed更多的是匹配,进行替换和删除。
awk有很多内建的功能,比如数组,函数等。灵活性是awk的最大优势。

awk的结构
awk '
BEGIN{ print "start"}
pattern { commands }
END{ print "end"}'
file
为了偏于观看,我打了回车,实际上是一行

一个awk脚本通常是3部分
1. BEGIN语句块
2. 能够使用模式匹配的通用语句块
3. END语句块
 他们任何一部分都可以不出现在脚本中。脚本通常包含在双引号或者单引号内。
 例如:

awk 'BEGIN{i=0}{i++}END{print i}' filename 

工作原理

awk命令的工作方式如下:

1. 执行BEGIN{commands}语句块中的语句
2. 从文件或者stdin中读取一行,然后执行pattern{commands}. 迭代直到全部读取完毕
3. 最后执行END{commands}语句块

再次提醒,他们任何一部都可以没有

而awk的功能也远不止如此

入门实例:

echo | awk '{var1="v1";var2="v2";var3="v3"; print var1,var2,var3;}' 
打印: v1 v2 v3 
</div>

解释:逗号为定界符(分隔符)

echo | awk '{var1="v1";var2="v2";var3="v3"; print var1"-"var2"-"var3;}'

打印v1-v2-v3

解释:双引号为连接符

其他任何符号,都不能正常输出v1,v2,v3

解读--help(一个非常庞大复杂的帮助文档,官方用了410页的篇幅PDF来介绍,如果我只言片语,你信我自己都不信。。)

用法: awk [POSIX 或 GNU 风格选项] -f 脚本文件 [--] 文件 ...
用法: awk [POSIX 或 GNU 风格选项] [--] '程序' 文件 ...
POSIX 选项:             GNU 长选项:
     -f 脚本文件        --file=脚本文件
    -F fs            --field-separator=fs
指定输入文本分隔符,fs是一个字符串或者是一个正则表达式,
    -v var=val        --assign=var=val
将外部变量值付给var
     -m[fr] val
     -O            --optimize
启用一些优化程序的内部表示。
     -W compat        --compat
在兼容模式下运行awk。所以gawk的行为和标准的awk完全一样,所有的awk扩展都被忽略。
     -W copyleft        --copyleft
打印简短的版权信息
    -W copyright        --copyright
打印短版的通用公共许可证,然后退出
     -W dump-variables[=file]    --dump-variables[=file]
打印全局变量,其类型,提交的最终值的排序列表。
    -W exec=file        --exec=file
与-f类似,但与他有两点不同,(我回头把相关文档上传,太长)
    -W gen-po        --gen-po
(内容太多)
    -W help            --help 打印帮助
    -W lint[=fatal]        --lint[=fatal]
警告可疑或不移植到其他的awk实现的结构
     -W lint-old        --lint-old
打印关于不能向传统unix平台移植的结构的警告
     -W non-decimal-data    --non-decimal-data
启用自动输入数据的解释,八进制和十六进制值
     -W profile[=file]    --profile[=file]
启用awk程序剖析
     -W posix        --posix
在严格意义上的POSIX模式运作。
     -W re-interval        --re-interval
允许间隔表达式在正则表达式上
    -W source=program-text    --source=program-text
     -W traditional        --traditional
传统的Unix awk的正则表达式匹配
     -W usage        --usage
     -W use-lc-numeric    --use-lc-numeric
解析数字输入时,强制使用的语言环境中的小数点字符
 数据
 -W version        --version
提交错误报告请参考“gawk.info”中的“Bugs”页,它位于打印版本中的“Reporting
 Problems and Bugs”一节

注意:gawk是awk的GNU版本,即使help ,在ubuntu下也需要先安装gawk

这回我们就不解读了,为了增加大家的信息和乐趣,先来点基本的:

部分特殊变量:

NR: 表示记录数量,在执行过程中对应于行号
NF:表示字段数量,在执行过程中对应于当前行的字段数
$0: 这个变量包含执行过程中当前行的文本内容
$1: 第一个字段的文本内容
$2: 第二个字段的文本内容

例子:

例1.

echo -e "line1 f2 f3\nline2 f4 f5\nline3 f6 f7"|\#这个\是在窗口中写多行命令用的 
awk '{ 
print "Line no:"NR",No of fields:"NF, "$0="$0,"$1="$1,"$2="$2,"$3="$3 
}' 
</div>

小注一下:$1是打印第一个,$NF打印最后一个字段,$(NF-1)打印倒数第二个

 例2.

seq 5 | awk 'BEGIN{ sum=0;print "Summation:"}{print $1"+";sum+=1}END{print "==";print sum}'

这个例子用到了基本格式。

BEGIN中 初始化了sum,打印Summation
中间模块打印了第一列,然后给sum+1

END中打印了sum

 例3. 关于-v 外部变量

$ VAR=10000
$echo | awk –v VARIABLE=$VAR'{print VARABLE}'
</div>

还有另一种灵活的方法可以将多个外部变量传递给awk,例如:

您可能想查找下面的文章:

  • linux Shell脚本里面把一个数组传递到awk内部进行处理
  • linux Shell脚本里面把一个数组传递到awk内部进行处理
  • 一天一个shell命令 linux文本内容操作系列-awk命令详解
  • linux shell awk获得外部变量(变量传值)简介

相关文章

  • shell for循环与数组应用介绍
  • 创建Linux系统服务的方法
  • 实时查看系统流量的Shell脚本分享
  • Linux Shell中三种引号的用法及区别
  • Shell 编程:Bash空格的那点事
  • Shell脚本中判断变量为数字的3种方法
  • linux基础之Shell Script入门介绍
  • linux网络编程用到的网络函数详解用和使用示例
  • linux用户与文件基础命令介绍(1)
  • Linux命令每天必学(55)之traceroute命令

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • 使用shell脚本分析网站日志统计PV、404、500等数据
    • shell 编程中空格的使用方法
    • shell中使用echo打印彩色字体和彩色背景的方法
    • shell脚本中echo显示内容带颜色的实现方法
    • 使用iconv批量改变文件编码的shell脚本
    • Linux监控cpu以及内存使用情况之top命令(详解)
    • Shell编程中的特殊变量之进程状态变量介绍
    • rsync结合find技巧分享
    • Shell正则表达式验证IP地址
    • 几个常用的Linux操作系统监控脚本代码

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有