1. 什么是awk?
awk是一个优良的文本处理工具,与其他语言不同之处在于它是数据驱动,大多数其他语言是进程驱动
2. awk的种类
3. 运行awk
awk 命令格式:
awk [参数] ‘模式匹配 {处理}’ 文件列表 其中[] 代表可选
• 程序比较短的时候,我们可以用以下命令
•程序较长时,我们可以将代码保存成文件的形式,并使用以下命令
BEGIN{} 模式处理前的动作
END{} 模式处理后的动作
printf 格式化打印
print 打印各个域
4. 选项参数
• -F fs 或者 field-separator fs
指定输入文件拆分分隔符, fs是一个字符串或者是正则表达式
• -f source-file
从源文件读取awk命令
• -v var=val 或者 -- assign var=val
给用户自定义的一个变量赋值
• -b 或者 --characters-as-bytes
把所有的输入数据当做单字节字符处理,另外print和printf输出也被当做单字节字符处理
• -d[file] 或者 --dump-variables[=file]
将全局变量的排序列表,他们的类型和最后的值写入file中,如果没有提供文件,则在写入当前目录的awkvars.out
• -D[file] 或者 --debug[=file]
调试awk程序
• -i source-file 或者 --include source-file
从source-file读取一个awk库
• -l ext 或者 --load ext
导入一个叫ext的动态扩展库
5. awk的内置变量
-ARGC 命令行变参个数
-ARGV 命令行各个参数数组
-FILENAME 当前处理文件名
-NR 到当前位置记录数
-FNR 当前文件中的记录号
-NF 当前记录中域个数
-FS 输入域分隔符,默认为空格
-OFS 输出与分隔符
-RS 输入记录分隔符, 默认是 \n
-ORS 输出记录分隔符
其它: $0 表示整条记录; $1, $2, ... 表示记录的各个域
6. 一些简单的例子
文件mail_list.txt
Amelia 555-5553 amelia.zodiacusque@gmail.com F
Anthnoy 555-3412 anthony.asserturro@hotmail.com A
Becky 555-7685 becky.algebrarum@gmail.com A
Bill 555-1675 bill.drowning@hotmail.com A
• 将所有的内容打印出来
• 将第一列和第三列输出
注:中间加逗号会默认字段间以空格或者tab分隔,否者不分隔
awk是一个优良的文本处理工具,与其他语言不同之处在于它是数据驱动,大多数其他语言是进程驱动
2. awk的种类
awk 有3个版本:awk、nawk和gawk,其中gwak是awk的GNU版本,可以输入一下指令查看awk的版本及版本号:
awk --version
3. 运行awk
awk 命令格式:
awk [参数] ‘模式匹配 {处理}’ 文件列表 其中[] 代表可选
• 程序比较短的时候,我们可以用以下命令
awk ‘program’ input-file1 input-file2
awk -f program-file input-file1 input-file2
BEGIN{} 模式处理前的动作
END{} 模式处理后的动作
printf 格式化打印
print 打印各个域
4. 选项参数
• -F fs 或者 field-separator fs
指定输入文件拆分分隔符, fs是一个字符串或者是正则表达式
• -f source-file
从源文件读取awk命令
• -v var=val 或者 -- assign var=val
给用户自定义的一个变量赋值
• -b 或者 --characters-as-bytes
把所有的输入数据当做单字节字符处理,另外print和printf输出也被当做单字节字符处理
• -d[file] 或者 --dump-variables[=file]
将全局变量的排序列表,他们的类型和最后的值写入file中,如果没有提供文件,则在写入当前目录的awkvars.out
• -D[file] 或者 --debug[=file]
调试awk程序
• -i source-file 或者 --include source-file
从source-file读取一个awk库
• -l ext 或者 --load ext
导入一个叫ext的动态扩展库
5. awk的内置变量
-ARGC 命令行变参个数
-ARGV 命令行各个参数数组
-FILENAME 当前处理文件名
-NR 到当前位置记录数
-FNR 当前文件中的记录号
-NF 当前记录中域个数
-FS 输入域分隔符,默认为空格
-OFS 输出与分隔符
-RS 输入记录分隔符, 默认是 \n
-ORS 输出记录分隔符
其它: $0 表示整条记录; $1, $2, ... 表示记录的各个域
6. 一些简单的例子
文件mail_list.txt
Amelia 555-5553 amelia.zodiacusque@gmail.com F
Anthnoy 555-3412 anthony.asserturro@hotmail.com A
Becky 555-7685 becky.algebrarum@gmail.com A
Bill 555-1675 bill.drowning@hotmail.com A
• 将所有的内容打印出来
awk ‘{print$0}’ mail_list.txt
输出
• 将第一列和第三列输出
awk ‘{print$1,$3}’ mail_list.txt
输出
注:中间加逗号会默认字段间以空格或者tab分隔,否者不分隔