AWK 使用文档及教程
AWK 使用文档
内容来源于awk英文教程。
awk是类Unix环境下非常实用的文本处理和数据统计工具,非常实用。
awk的功能包含但不限于以下:
- 文字处理;
- 生成格式化的文本报告;
- 执行算术运算;
- 执行字符串操作。
要真正会使用awk,需要了解其内部结构,awk遵循一个简单的工作流程,读取 - 执行 - 重复。
BEGIN语句块在程序开始的使用执行,它只执行一次,在这里可以初始化变量。BEGIN是AWK的关键字,因此它必须为大写,注意,这个语句块是可选的。
BODY 语句块
BODY语句块的语法
/pattern/ {awk-commands} |
BODY语句块中的命令会对输入的每一行执行,我们也可以通过提供模式来控制这种行为。注意,BODY语句块没有关键字。
END 语句块
END语句块的语法
END {awk-commands} |
END语句块在程序的最后执行,END是AWK的关键字,因此必须为大写,它也是可选的。
操作指令
- 新建mark.txt文件用作演示
1) Amit Physics 80 |
添加标题显示内容
- command
awk 'BEGIN{printf "Sr No\tName\tSub\tMarks\n"} {print}' marks.txt
- output
Sr No Name Sub Marks |
显示完整内容
- command
awk '{print}' marks.txt
- output
1) Amit Physics 80 |
AWK脚本
可以新建一个文本文件command.awk,使用awk -f
指令运行,文件内容为{print}
- Command
awk [options] -f file ....
- Example
awk -f command.awk marks.txt
- output
1) Amit Physics 80 |
awk打印列或字段
- 可以指示 AWK 仅打印输入字段中的某些列
awk '{print $3 "\t" $4}' marks.txt
Physics 80 |
注意:
- awk的参数中
$0
指的是所有,第一列是$1
,以此类推
以任意顺序打印列
- command
awk '{print $4 "\t" $3}' marks.txt |
- output
80 Physics |
内置函数length()
- 打印超过 18 个字符的行
- command
awk 'length($0) > 18' marks.txt
- output
1) Amit Physics 80 |
✨:其他内置函数
使用正则表达式
- “.”匹配除行尾字符之外的任何单个字符
- command
echo -e "cat\nbat\nfun\nfin\nfan" | awk '/f.n/'
- output
fun |
- “^”匹配行首
- command
echo -e "This\nThat\nThere\nTheir\nthese" | awk '/^The/'
- output
There |
- “$”匹配行尾
- Example:以下示例打印以字母n结尾的行
- command
echo -e "knife\nknow\nfun\nfin\nfan\nnine" | awk '/n$/'
- output
fun |
- 匹配字符集
- Example1:示例匹配模式Call和Tall但不匹配Ball
- command
echo -e "Call\nTall\nBall" | awk '/[CT]all/'
- output
Call |
- Example2:示例仅打印Ball
- command
echo -e "Call\nTall\nBall" | awk '/[^CT]all/'
- output
Ball |
组合统计
新建data.txt文件用作演示
91341221099321954R 341221000030145 临泉县雨祥汽车销售有限责任公司 |
wc
- command
wc data.txt
- output
13 54 1108 data.txt
13: 行数(-l)
54: 字数(-w)
1108:字符数(-c)
wc -l : 显示行数
- example:统计样本行数:
- command
wc -l data.txt
- output
13
grep 搜索
组合使用
- example:统计统一信用代码为913401开头的样本个数
- command
awk '{print $1}' data.txt | grep '913401'| wc -l
- output
5