Shell 命令之 awk

简介:

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结尾的单词



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章