[toc]
awk简介
awk文本处理
-
逐行读取文本
- awk以行(records)为单位,从文件或标准输入读取文本
-
拆分字段
- 默认情况下,
awk以空格或制表符作为分隔符,将每行拆成多个字段
- 默认情况下,
-
执行操作
- 对匹配的行进行操作,包括修改、计算、格式化输出等
-
输出结果
语法格式
awk option 'pattern {action}' file
pattern匹配模式action处理动作,针对符合匹配模式的数据进行的处理动作,- 如果没有
pattern,只有action,会对所有文本执行action的处理动作 - 如果没有
action,只有pattern,会打印出符合匹配模式的行
- 如果没有
选项
-F 指定字段分隔符
示例:取出IP地址
- centos7
- centos6
说明
[ ]+ 表示分隔符是连续的空格
ifconfig eth0 | awk -F'[ ]+' 'NR==2{print $3}'
说明
[ :]+ 表示分隔符是连续的空格冒号
ifconfig eth0 | awk -F'[ :]+' 'NR==2{print $4}'
-v 创建或修改awk中的变量
说明
创建一个变量并输出,只在awk中生效,且awk中输出变量不需要加 $ 符号
- 单个-v
- 多个-v
注意
-v 必须与后边的大括号紧挨
$ awk -v{n1=10,n2=20} 'BEGIN{print n1,n2}'
10 20
$ awk -v n1=10 -v n2=20 'BEGIN{print n1,n2}'
10 20
-t 从文件读取 awk 脚本
示例:awk从外部文件加载awk脚本并处理输入文件
script.awk 内容如下
# 打印标题
BEGIN { print "Name Age" }
# 处理每一行
{ print $1, $2 }
# 结束时打印总结
END { print "Processing Done." }
input.txt 内容如下
Alice 25
Bob 30
Charlie 22
执行
$ awk -f script.awk input.txt
Name Age
Alice 25
Bob 30
Charlie 22
Processing Done.

