AWK是一种处理文本文件的语言,是一个强大的文本分析工具。
之所以叫AWK是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。
语法如下
awk [选项参数] 'script' var=value file(s)
或
awk [选项参数] -f scriptfile var=value file(s)
指定分割符, 根据下标显示内容:
命令 | 含义 |
---|---|
awk -F ‘,’ ‘{print $1, $2, $3}’ 文件 | 操作1.txt文件, 根据 逗号 分割, 打印 第一段 第二段 第三段 内容 |
参数:
选项 | 含义 |
---|---|
-F ',' | 使用 指定字符 分割 |
$ + 数字 | 获取第几段内容 |
$0 | 获取 当前行 内容 |
NF | 表示当前行共有多少个字段 |
$NF | 代表 最后一个字段 |
$(NF-1) | 代表 倒数第二个字段 |
NR | 代表 处理的是第几行 |
准备一个a.txt:
zhangsan 68 99 26
lisi 98 66 96
wangwu 38 33 86
zhaoliu 78 44 36
maq 88 22 66
zhouba 98 44 46
演示:
# 自定义符号切割b.txt 显示前两行
cat b.txt | awk -F '|||' '{print $1,$2}'# 转大写
cat a.txt | awk -F ' ' '{print toupper($1)}'# 转小写
cat a.txt | awk -F ' ' '{print tolower($1)}'# 返回长度
cat a.txt | awk -F ' ' '{print length($1)}'
指定分割符, 根据下标显示内容:
命令 | 含义 |
---|---|
awk -F ’ ’ ‘{OFS=“===”}{print $1, $2, $3}’ 1.txt | 操作1.txt文件, 根据 逗号 分割, 打印 第一段 第二段 第三段 内容 |
参数:
选项 | 英文 | 含义 |
---|---|---|
OFS="字符" | output field separator | 向外输出时的段分割字符串 |
转义序列 | 含义 |
---|---|
\b | 退格 |
\f | 换页 |
\n | 换行 |
\r | 回车 |
\t | 制表符 |
# 按照 === 进行分割, 打印 第一段 第二段 第三段
cat a.txt | awk -F ' ' '{OFS="==="}{print $1,$2,$3}'
# 按照 制表符tab 进行分割, 打印 第一段 第二段 第三段
cat a.txt| awk -F ' ' '{OFS="\t"}{print $1,$2,$3}'
调用 awk 提供的函数
命令 | 含义 |
---|---|
awk -F ‘,’ ‘{print toupper($2)}’ 1.txt | 操作1.txt文件, 根据 逗号 分割, 打印 第一段 第二段 第三段 内容 |
常用函数如下:
函数名 | 含义 | 作用 |
---|---|---|
toupper() | upper | 字符 转成 大写 |
tolower() | lower | 字符 转成小写 |
length() | length | 返回 字符长度 |
# 打印第一段内容cat a.txt | awk -F ' ' '{print $1}'
# 将第一段内容转成大写 且 显示 cat a.txt | awk -F ' ' '{print toupper($1)}'
awk计算:
命令 | 含义 |
---|---|
awk ‘BEGIN{初始化操作}{每行都执行} END{结束时操作}’ 文件名 | BEGIN{ 这里面放的是执行前的语句 } {这里面放的是处理每一行时要执行的语句} END {这里面放的是处理完所有的行后要执行的语句 } |
# 打印第四列的总和SUM
# 第一个大括号是开始执行的,第二个是要执行的语句
cat b.txt | awk -F ' ' 'BEGIN{sum=0}{sum+=$4}END{print sum}'
# 平均分NR
cat b.txt | awk -F ' ' 'BEGIN{sum=0}{sum+=$4}END{print sum/NR}'
# 最大值MAX
#最小值MIN cat a.txt |awk -F '' 'BEGIN{sum=0}{sum+=$4}END{print sum}'# 查看第四列的总分
cat a.txt| awk -F ' ' 'BEGIN{}{total=total+$4} END{print total}'