语法
awk [options] 'Pattern{action}' file ...
$0 | 整行 |
$n | 列数 |
$NF | 当前行的最后一列 |
NF | 当前行的列数 |
Action(动作)
print | 打印 |
printf | 格式化打印 |
exit | 退出awk |
if | 条件语句 |
if...else | 条件语句 |
if...else if | 条件语句 |
for | 循环语句 |
while | 循环语句 |
do...while | 循环语句 |
awk '/正则表达式/{Action}' file //正则表达式需要放在"/ /"中
awk '/正则表达式1/[,/正则表达式2/]{Action}' file
awk 'BEGIN{print "aaa","bbb"}' test.txt 在处理test.txt之前先打印"aaa""bbb"
awk '{print $1}END{print "aaa"}' test.txt 在处理test.txt之后打印"aaa"
awk 'BEGIN{print "aaa"}{print $1,$2}' test.txt
options(选项)
-F | 指定分隔符 | -F: | 以":"作为分割符 |
-v | 设置变量 | -v FS='#' | 设置"#"为默认的输入分割符 |
变量
FS | 输入分割符,默认为空格 | field separator |
OFS | 输出分割符,默认为空格 | output field separator |
RS | 输入记录分割符(输入换行符) | 指定输入时的换行符 |
ORS | 输出记录分割符(输出换行符) | 输出时用指定符号代替换行符 |
NF | 当前行的字段数量 | number of field |
NR | 行号 | 当前处理的文本的行号 |
FNR | 各文件分别计数的行号 | 处理多个文本是标注出不同文本的行号 |
FILENAME | 当前文件名 | 打印当前文件名 |
ARGV | 将命令行的各个参数保存成数组 | 'program{action}'不算参数 |
ARGC | 命令行参数的个数 | ARGV数组的长度 |
//各种方式定义自定义变量
awk -v myvar="mrhonest" '{print myvar}'
awk 'BEGIN{myvar="mrhonest";print myvar}'
//一次性定义多个变量
awk 'BEGIN{myvar1="mr";myvar2="honest";print myvar1,myvar2}'
//引用shell中的变量
abc="mrhonest"
awk -v myvar=$abc 'BEGIN{print myvar}'
格式化
printf命令
数组
函数
条件 ? 结果1 : 结果2
表达式1 ? 表达式2 : 表达式3
打印奇偶行
awk 'i=!i' file 打印奇数行
awk '!(i=!i)' file 打印偶数行
from(致谢):http://www.zsythink.net/archives/tag/awk