awk
1. 工作方式
awk 脚本结构: awk 'BEGIN{ statements } statements2 END{ statements }'
- 执行
begin
中语句块 - 从文件或
stdin
中读入一行,然后执行statements2
,重复这个过程,直到文件全部被读取完毕 - 执行
end
语句块
常用特殊常量:
NR
: 表示记录数量,在执行过程中对应当前行号NF
: 表示字段数量,在执行过程总对应当前行的字段数$0
: 这个变量包含执行过程中当前行的文本内容$1
: 第一个字段的文本内容$2
: 第二个字段的文本内容
打印指定文本区域:
确定行号: seq 100 | awk 'NR=4, NR=6 {print}'
确定文本, 打印处于 start_pattern
和 end_pattern
之间的文本: awk \'\/start_pattern\/, \/end_pattern\/ filename
示例:
seq 100 | awk '/13/,/15/' cat /etc/passwd| awk '/mai.*mail/,/news.*news/'
2. 常用内建函数
index(string, search_string)
: 返回 search_string 在 string 中出现的位置sub(regex, replacement_str, string)
: 将正则匹配到的第一处内容替换为replacement_str
match(regex, string)
: 检查正则表达式是否能够匹配字符串length(string)
: 返回字符串长度echo | awk '{"grep root /etc/passwd" | getline cmdout; print length(cmdout) }'
printf
对输出进行格式化:seq 10 | awk '{printf "->%4s\n", $1}'