shell工具篇之awk
来源:互联网 发布:个体户注册域名 编辑:程序博客网 时间:2024/06/14 03:47
1.了解awk必须要知道的三点:
- awk是文本处理工具,不仅能以行为单位处理文件还能以列为单位处理文件;
- awk默认行分隔符为'\n' ,列分隔符默认为连续的空格或tab,但是行分隔符和列分隔符都是可以自定义的;
- awk还是一门很复杂的脚本语言,具有类C一样的分支和循环结构。
awk命令的基本格式:awk option 'script' file1 file2 ...awk option -f scriptfile file1 file2...
和sed一样,awk处理的文件既可以由标准输入重定向得到,也可以当命令行参数传入;编辑命令可以直接当命令行参数传入,也可以用 -f 参数指定一个脚本文件。
编辑命令的格式为: /pattern/{actions}和sed类似,pattern是正则表达式,actions是一系列操作。awk程序一⾏行读出待处理文件,如果某一行与pattern匹配,或者满足condition条件,则执行相应的actions,如果一条awk命令只有actions部分,则actions作用于待处理文件的每一行。
(1)下面先举一个例子来说明 $1,$2,$0等代表的含义:
再比如:
从上面的例子中我们得出:
自动变量$1、$2分别表示第一列、第二列等,类似于Shell脚本的位置参数,而$0表示整个当前行。
(2)自定义列分隔符,用 -F参数
awk默认的列分隔符是连续的空格或tab,在指定分隔符后可按指定的分隔符来划分列。
(3)awk还有一个NF变量,它是自动获取最后一列的,如下图:
可见awk也有和C语言非常相似的printf函数. 用print输出时,当我们需要输出多个变量时,每个变量之间用逗号隔开即可,如果输出的是字符串要以双引号括起来:
总结一下awk中的print和printf:
(1)其中print函数的参数可以是变量、数值或者字符串。字符串必须用双引号引用,参数用逗号分隔。如果没有逗号,参数就串联在一起而无法区分。这里,逗号的作用与输出文件的分隔符的作用是一样的,只是后者是空格而已。
(2)printf函数,其用法和c语言中printf基本相似,可以格式化字符串,输出复杂时,printf更加好⽤用,代码更易懂。
3.awk命令的condition部分还可以是两个特殊的BEGIN和END
awk处理文件分三个阶段:处理前,处理中,处理后。而BEGIN是处理之前执行的动作,END是处理后执行的动作。
用法格式: BEGIN{action},END{action}
(1)在输出文件内容之前先输出begin,在处理完文件之后输出end;
(2)awk命令可以像C语言一样使用变量(但不需要定义变量),因为awk也是一门弱类型语言,所以它的变量可以随处定义,而且不需要类型。比如统计一个文件中的空行数,这里就用到END
4.shell脚本方式
将所有的awk命令插入一个文件,并使awk程序可执行,然后awk命令解释器作为脚本的首行,一遍通过键入脚本名称来调用。相当于shell脚本首行的:#!/bin/sh 可以换成:#!/bin/awk -f
注意,如果蛇棒位置没有-f ,那么执行时就要在命令行上加上,前面我们也介绍了,-f 选项是指定一个执行脚本。
5.awk通用正则表达方法
(1)awk语句:awk ‘/REG/{action}’
/REG/为正则表达式,可以将$0中,满足条件记录 送到action进行处理
(2)awk正则运算语句(〜,〜!等同!〜)
(3)awk内置使用正则表达式函数
gsub( Ere, Repl, [ In ] )sub( Ere, Repl, [ In ] )match( String, Ere )split( String, A, [Ere] )
6.awk的内置变量
ARGC 命令行参数个数ENVIRON 支持队列中系统环境变量的使用FILENAME awk浏览的文件名FNR 浏览文件的记录数FS 设置输入域分隔符,等价于命令行 -F选项NF 浏览记录的域的个数NR 已读的记录数OFS 输出域分隔符ORS 输出记录分隔符RS 控制记录分隔符
7.通过awk实现1--100求和的运算
awk中的循环语句同样借鉴于C语⾔,支持while、do/while、for、break、continue,这些关键字的语义和C语言中的语义完全相同。
8.awk数组(有兴趣的同学可以自己去详细了解一下,这里不做过多描述)
awk中数组的下标可以是数字和字母,数组的下标通常被称为关键字(key)。值和关键字都存储在内部的一张针对key/value应用hash的表格里。由于hash不是顺序存储,因此在显示数组内容时会发现,它们并不是按照你预料的顺序显示出来的。数组和变量一样,
都是在使用时自动创建的,awk也同样会自动判断其存储的是数字还是字符串。一般而言,awk中的数组用来从记录中收集信息,可以用于计算总和、统计单词以及跟踪模板被匹配的次数等等。
- shell工具篇之awk
- shell工具之awk
- Shell脚本之awk篇
- shell学习之awk篇
- Shell脚本之awk篇
- Shell脚本之awk篇
- shell 学习心得之awk篇
- shell浅谈之七文本处理工具grep、sed、awk
- shell浅谈之七文本处理工具grep、sed、awk
- shell浅谈之七文本处理工具grep、sed、awk
- Shell脚本之awk篇(基础)
- shell之awk
- shell之Awk
- Shell脚本之awk
- shell 之 awk
- shell学习之awk
- shell命令之awk
- Shell之awk详解
- 微信小程序开发记录(1)
- 设计模式-组合模式
- tensorflow+minst
- Kotlin中的函数和Lambda表达式
- 一个测试tf卡性能的脚本
- shell工具篇之awk
- poj 1321棋盘问题(简单搜索)
- 通过range函数快速产生一个list
- 远程文件批量下载并压缩ZIP包
- ROS从bag文件中导出图片
- 【Android】JNI调用简析
- mysql Tablespace exists解决
- struts2 结果类型
- 【Server端和Client端常见的通信方式】-TCP/IP和UDP