文本处理三剑客之 awk

在 linux 或 *nix 中 awk 、sed、grep 统称为文本处理三剑客。

awk

awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本。

awk其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母。实际上 AWK 的确拥有自己的语言: AWK 程序设计语言 , 三位创建者已将它正式定义为“样式扫描和处理语言”。它允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。

使用

awk 其实是 gawk 的一个连接

[root@OpenStack ~]# which awk
/bin/awk
[root@OpenStack ~]# cd /bin/
[root@OpenStack bin]# ll awk
lrwxrwxrwx. 1 root root 4 3月  14 19:39 awk -> gawk

用法

awk [options]  'program' {filenames}

program格式:’{pattern + action}’ 语句之间用分号分割

选项:

-F 指明输入时用到的字段分隔符
-v 用于实现自定义变量,格式:var=value

##awk 的实现方式
awk 会把需要处理的文本进行切片,切割成片段后 可以使用$1-$n 的方式来显示切割后的行,第一行为$1,第二行为$2,以此类推,全文输入则使用$0,此外,处理完毕后,我们还可以加入条件判断,总的来说 awk 其实也是一门编程语言。

1.打印第一行

[root@OpenStack bin]# awk '{print $1}' /etc/fstab

我们可以使用 print 输出某行,格式是print item1,item2,…

2.打印多行

[root@OpenStack bin]# awk '{print $1,$3}' /etc/passwd