码迷,mamicode.com
首页 > 其他好文 > 详细

awk

时间:2019-10-29 13:54:04      阅读:71      评论:0      收藏:0      [点我收藏+]

标签:awk   获取   匹配   部分   for   hone   三元   tag   定义   

语法

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}

    {print $0,$1} ","的作用相当于输出$0后,添加一个输出分割符

    Pattern(模式)

    空模式
    关系运算模式
    BEGIN/END模式
    正则模式
    行范围模式

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

    使用{x,y}这种次数匹配的正则表达式时需要配合--posix选项或者--re-interval选项

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

数组

awk的数组下标默认从1开始

函数

  • 算数函数
    | 函数| 作用|
    | ----| ----|
    | 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

awk

标签:awk   获取   匹配   部分   for   hone   三元   tag   定义   

原文地址:https://www.cnblogs.com/mrhonest/p/11758105.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!