一、前述
awk是一个强大的文本分析工具。相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。 简单来说awk就是把文件逐行的读入,(空格,制表符)为默认分隔符将每行切片,切开的部分再进行各种分析处理。
二、具体
1、基础知识点
awk -F '{pattern + action}' {filenames} 支持自定义分隔符 支持正则表达式匹配 支持自定义变量,数组 a[1] a[tom] map(key) 支持内置变量 ARGC 命令行参数个数 ARGV 命令行参数排列 ENVIRON 支持队列中系统环境变量的使用 FILENAME awk浏览的文件名 FNR 浏览文件的记录数 FS 设置输入域分隔符,等价于命令行 -F选项 NF 浏览记录的域的个数 NR 已读的记录数 OFS 输出域分隔符 ORS 输出记录分隔符 RS 控制记录分隔符 支持函数 print、split、substr、sub、gsub 支持流程控制语句,类C语言 if、while、do/while、for、break、continue
$0表示所有域, $1表示第一个域, $n表示第n个域。 默认域分隔符是空格键或tab键。 2、举例
只是显示/etc/passwd的账户:CUT awk -F':' '{print $1}' passwd 只是显示/etc/passwd的账户和账户对应的shell,而账户与shell之间以逗号分割,而且在所有行开始前添加列名name,shell,在最后一行添加"blue,/bin/nosh"(cut,sed) awk -F':' 'BEGIN{print "name,shell"} {print $1 "," $7} END{print "blue,/bin/nosh"}' passwd 搜索/etc/passwd有root关键字的所有行 awk '/root/ { print $0}' passwd 统计/etc/passwd文件中,每行的行号,每行的列数,对应的完整行内容
xxx Math English C++ Experiment
Monkey 100 90 95 Good
Cat 80 100 60 Perfect
Dog 90 60 70 Great
Tiger 95 85 90 Fantastic
Administrator@51B6904C3C8A485 ~/learn_awk
$ awk '{print $2}' test.txt
Math
100
80
90
95
Administrator@51B6904C3C8A485 ~/learn_awk
$
看这篇博客吧 ,讲得很好https://blog.csdn.net/stpeace/article/details/46848873