首页 > 学院 > 开发设计 > 正文

Shell 命令之 awk

2019-11-06 07:43:32
字体:
来源:转载
供稿:网友

简介:

awk是一种用于处理文本的编程语言工具,是linux及Unix环境中现有的功能最强大的数据处理引擎之一。

不同于Shell的其他一些常见命令,它可以完成相对复杂的一些操作:样式装入、流控制、数学运算符、进程控制语句甚至于内置的变量和函数。可以说它具备了一个完整的语言所应具有的几乎所有特性。awk通过扫描文件中的每一行,查找与命令行中所给定内容相匹配的模式,如果发现匹配内容,则进行下一个编程步骤。如果找不到匹配内容,则继续处理下一行。

使用:

1.

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.

除了默认的分隔符外,我们还可以使用-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也可以使用类似C语言的语法,如格式化输出%:

awk '{printf "%d",$1}' test       #将test文件中的第一个字段打印出来,格式为十进制数

正则表达式:

又称规则表达式(Regular Expression,在代码中常简写为regex、regexp或RE),通常被用来检索、替换那些符合某个模式(规则)的文本。

正则表达式最常见特殊字符

/               转义符

< >           匹配指定单词

[ ]             匹配指定范围内的字符

[^]            匹配一个不在指定范围内的字符

*               匹配*前字符(或模式)重复多次的单词

示例:grep '[^ ]*ing' test               #在test中匹配不以空格开头的以ing结尾的单词


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表