awk

扫码查看

语法

awk [options] 'Pattern{action}' file ...
$0整行
$n列数
$NF当前行的最后一列
NF当前行的列数

Action(动作)

print打印
printf格式化打印
exit退出awk
if条件语句
if...else条件语句
if...else if条件语句
for循环语句
while循环语句
do...while循环语句
  • 整行输出
    {print $0} 等于 {print}

    Pattern(模式)

  • BEGIN/END模式
    | 参数| 含义|
    | ----| ----|
    | BEGIN| 在action前执行|
    | END| 在action后执行|
  • 关系运算模式
    | 关系运算符| 含义| 用法示例|
    | ----| ----| ----|
    | <| 小于| x < y|
    | <=| 小于等于| x <= y|
    | ==| 等于| x == y|
    | !=| 不等于| x != y|
    | >=| 大于等于| x >= y|
    | >| 大于| x > y|
    | ~| 与对应的正则匹配则为真| x~ /正则/|
    | !~| 与对应的正则不匹配则为真| x !~ /正则/|
  • 正则模式

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命令

数组

函数

  • 算数函数
    | 函数| 作用|
    | ----| ----|
    | rand()| 生成随机数,如果不配合srand()使用,函数的返回值将一直不变|
    | srand()| 初始化随机数发生器,用于何止rand()产生随机数时的种子|
    | int()| 截取数字整数部分的值|
  • 字符串函数
    | 函数| 作用|
    | ----| ----|
    | sub()| 在指定的范围内查找指定字符,并将其替换为指定的字符串,只替换匹配到的第一个值|
    | gsub()| 替换指定范围内所有的指定字符|
    | length()| 获取指定字符串的长度|
    | index()| 获取指定字符位于整个字符串中的位置|
    | split()| 将指定字符串生成数组|
  • 其它函数
    | 函数| 作用|
    | ----| ----|
    | asort()| 根据数组元素值排序,返回值是数组的长度|
    | asorti()| 根据数组元素下标排序|

    三元运算

条件 ? 结果1 : 结果2
表达式1 ? 表达式2 : 表达式3

打印奇偶行

awk 'i=!i' file     打印奇数行
awk '!(i=!i)' file  打印偶数行

from(致谢):http://www.zsythink.net/archives/tag/awk

01-08 20:09
查看更多