[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.