awk 是一种脚本语言,用于解决或剖析文本文件。或者咱们能够说,awk 命令次要用于依据列或字段或一组列对数据进行分组,它次要用于以有用的形式报告数据,它还应用 Begin 和 End 块来解决数据。
awk 名声在外,然而很少有人晓得它的违心是什么,awk 代表 “Aho, Weinberger, and Kernighan”,又见伯格系列,如果有一天中国人的工具用人名来命名会是啥样子?
根本语法
# awk ‘pattern {action}’ input-file > output-file
咱们先创立一个蕴含以下数据的输出文件
$ cat awk_fileName,Marks,Max MarksRam,200,1000Shyam,500,1000Ghyansham,1000Abharam,800,1000Hari,600,1000Ram,400,1000
(1) 打印所有行
默认状况下,awk 打印文件的所有行,示例如下
$ awk '{print;}' awk_fileName,Marks,Max MarksRam,200,1000Shyam,500,1000Ghyansham,1000Abharam,800,1000Hari,600,1000Ram,400,1000
备注: 在 awk 命令中 {print;} 用于打印所有字段及其值。
(2) 只打印特定的字段
在 awk 命令中,咱们应用 $ (美元) 符号后跟字段号来打印字段值。
咱们只打印字段 2 和字段 3,应用选项 -F,指定逗号为字段分隔符。
$ awk -F "," '{print $2, $3;}' awk_fileMarks Max Marks200 1000500 10001000800 1000600 1000400 1000
(3) 打印与模式匹配的行
打印蕴含单词 Hari 或 Ram 的行,示例如下
$ awk '/Hari|Ram/' awk_fileRam,200,1000Hari,600,1000Ram,400,1000
(4) 查找第一列惟一值
要从第一列中打印惟一的值,运行如下 awk 命令
$ awk -F, '{a[$1];}END{for (i in a)print i;}' awk_fileAbharamHariNameGhyanshamRamShyam
(5) 特定列中数据项的和
在 awk 命令中,也能够依据搜寻执行一些算术操作,语法如下所示
$ awk -F, ‘$1==”Item1″{x+=$2;}END{print x}’ awk_file
在上面的例子中,咱们搜寻 Ram,而后累加所对应的值。
$ awk -F, '$1=="Ram"{x+=$2;}END{print x}' awk_file600
(6) 求一列中所有数字的总数
在 awk 命令中,咱们还能够计算某一列中所有数字的和。在上面的例子中,咱们正在计算第 2 列和第 3 列的所有数字的和。
$ awk -F"," '{x+=$2}END{print x}' awk_file3500$ awk -F"," '{x+=$3}END{print x}' awk_file5000
(7) 分组求和
实现相似 SQL 中的按某个字段分组求和,示例如下:
$ awk -F, '{a[$1]+=$2;}END{for(i in a)print i", "a[i];}' awk_fileAbharam, 800Hari, 600Name, 0Ghyansham, 1000Ram, 600Shyam, 500
(8) 计算特定列的总和,并将其附加到文件的开端
awk 命令先对一个列求和,而后附加到文件开端,示例如下
$ awk -F"," '{x+=$2;y+=$3;print}END{print "Total,"x,y}' awk_fileName,Marks,Max MarksRam,200,1000Shyam,500,1000Ghyansham,1000Abharam,800,1000Hari,600,1000Ram,400,1000Total,3500 5000
(9) 分组计数
实现相似 SQL 中的按某个字段分组计数,示例如下:
$ awk -F, '{a[$1]++;}END{for (i in a)print i, a[i];}' awk_fileAbharam 1Hari 1Name 1Ghyansham 1Ram 2Shyam 1
(10) 打印分组的第一个记录
打印每个分组的第一个记录,示例如下
$ awk -F, '!a[$1]++' awk_fileName,Marks,Max MarksRam,200,1000Shyam,500,1000Ghyansham,1000Abharam,800,1000Hari,600,1000
AWK 块构造
根本语法
$ awk 'BEGIN{awk initializing code}{actual AWK code}' File-Name
咱们先创立一个具备以下内容的数据文件
(11) 自定义表头打印
$ awk 'BEGIN{print "Names\ttotal\tPPT\tDoc\txls"}{printf "%-s\t%d\t%d\t%d\t%d\n", $1,$2,$3,$4,$5}' datafile
(12) 批改文件分隔符
示例文件中咱们应用 SPACE 做分隔符,咱们将 SPACE 批改为 “|”,示例如下
$ awk 'BEGIN{OFS="|"}{print $1,$2,$3,$4,$5}' datafile
我的开源我的项目
- course-tencent-cloud(酷瓜云课堂 - gitee仓库)
- course-tencent-cloud(酷瓜云课堂 - github仓库)