简介:
awk是一种用于处理文本的编程语言工具,是Linux及Unix环境中现有的功能最强大的数据处理引擎之一。
不同于Shell的其他一些常见命令,它可以完成相对复杂的一些操作:样式装入、流控制、数学运算符、进程控制语句甚至于内置的变量和函数。可以说它具备了一个完整的语言所应具有的几乎所有特性。awk通过扫描文件中的每一行,查找与命令行中所给定内容相匹配的模式,如果发现匹配内容,则进行下一个编程步骤。如果找不到匹配内容,则继续处理下一行。
使用:
1.awk命令基本格式
awk为指令开头,隔一个空格,语句用单引号‘ ’括起来,语句中的执行动作用大括号{}括起来,隔一个空格,指令末尾为需要操作的文件名,示例如下:
awk 'a==3{print $0}' test
#扫描test文件,若匹配到a=3,执行print $0,即打印当前字段
#$1指第一个字段,$2指第二个字段,以此类推
2.awk的常见内建变量
$0 当前行
$n 当前记录的第n个字段,字段由FS分隔
NF 字段数
NR 行号(多文件时行号叠加)
FNR 单一文件行号
FS 输入字段分隔符,默认空格或Tab
OFS 输出字段分隔符,默认为空格RS 输入记录分隔符,默认为换行符
ORS 输出记录分隔符,默认为换行符
3.awk指定分隔符
除了默认的分隔符外,我们还可以使用-F指定分隔符
awk -F: '{print $1}' test #指定:为分隔符,打印test文件的第1个字段
awk -F'[\t;]' '{print $1}' test #指定tab和;为分隔符,打印test文件的第1个字段
*这里插入本人实践后对于字段的理解:
前面我们说到awk是通过扫描文件的每一行来执行命令的,所以每一行内的分隔符都用于区分各自行内的字段,如:
a/b/c #如果我们指定/为分隔符,则这一行被分为三个字段,分别为a b c
#如果执行awk -F/ '{print $1}' test,打印结果为a
以上是单行的情况,如果是多行:
a/b/c #如果我们指定/为分隔符,则每一行被分为三个字段,第一行为a b c
d/e/f #第二行为d e f
#如果执行awk -F/ '{print $1}' test,打印结果为
a
d
即:将每一行的第一字段打印出来,最终呈现为 列 的效果,而 列 与 列 之间的 分隔符 就是我们前面自定义的 / 符号
4.awk格式化输出
除了使用内建变量外,awk也可以使用类似C语言的语法,如格式化输出%:
awk '{printf "%d",$1}' test #将test文件中的第一个字段打印出来,格式为十进制数
5.正则表达式
又称规则表达式(Regular Expression,在代码中常简写为regex、regexp或RE),指定一种规则,通常被用来检索、替换那些符合某个模式(规则)的文本。
正则表达式最常见特殊字符
\ 转义符
< > 匹配指定单词
[ ] 匹配指定范围内的字符
[^] 匹配一个不在指定范围内的字符
* 匹配*前字符(或模式)重复多次的单词
grep '[^ ]*ing' test #在test中匹配不以空格开头的以ing结尾的单词