• awk用法笔记


    awk

    awk的基本用法

    • awk [ options ] program FILE ...
      • program : PATTERN{ACTION STATEMENTS}
      • ACTION STATEMENTS支持使用多条语句,语句间使用分号分隔
    • awk [ options ] -f program-file FILE ...

    awk常用选项(options)

    • -F 指明输入数据时的字段分隔符
      • 多分隔符'%| '+[% ]+
    • -v VAR=VALUE 自定义变量

    awk内建变量

    awk内部引用变量无需使用$

    • FS(input field seperator) 输入时字段分隔符 默认为空白字符 可以使用-F指定分隔符
    • OFS(onput field seperator) 输出时字段分隔符 默认为空白字符
    • RS(input record seperator) 输入时换行分隔符 默认为换行符
    • ORS(onput record seperator) 输出时换行分隔符 默认为换行符
    • NF(number of field) 每一行的字段数量
      • $NF 最后一列字段
    • NR(number of record) 行的数量
    • FNR(file number of record) 各文件单独计数行号
    • FILENAME 当前文件名
    • ARGC 命令行参数的个数
    • ARGV 数组,保存命令行所给定的各参数

    awk的操作符

    • + - * / ^ % 算术运算
    • > < == >= <= 比较运算
    • = += -= *= /= ++ -- 赋值运算
    • && || ! 逻辑运算
    • ~ !~ 模式匹配符 判断符号前的字符串是否匹配符号后的pattern

    PATTERN

    • empty 空模式 匹配每一行
    • relational expression 关系表达式 一般为比较大小 返回bool型
    • /regular expression/ 正则表达式模式 仅处理被模式匹配的行
    • /pat1/,/pat2/ 行范围
    • BEGIN/END
      • BEGIN{} 仅在开始处理文件之前执行一次
      • END{} 仅在文件处理完毕之后执行一次

    print

    # 打印多个字段时使用逗号分割,默认输出分隔符为空格
    awk '{ print item1, item2 … }' FILE
    • $0 打印整行字符 可省略
    • 逗号 逗号 输出分隔符为空格
    • 双引号 双引号 不解析变量 输出字符串本身
    • 空格 空格 输出字段没有分隔符

    printf

    # 格式化输出
    awk '{ printf FORMAT, item1, item2 … }' FILE
    格式符
    • %c 显示字符的ASCII码
    • %d %i 显示十进制证书
    • %e %E 科学计数法数值显示
    • %f 浮点数
    • %g %G 以科学计数法或浮点数形式显示数值
    • %s 字符串
    • %u 无符号证书
    • %% 百分号自身
    修饰符
    • %[-][#[.#]]d
      • 第一个数字控制显示宽度
      • 第二个数字控制浮点精度
      • -# 表示左对齐 默认右对齐
      • +# 显示数值的符号

    ACTION中的控制语句

    • if (condition){statments} else {statments} 多分支if语句
    • while (condition){statments} while循环
    • do {statments} while (condition) do while 循环
    • for (exp1;exp2;exp3){statments} for循环
    • selector?if-true:if-false 三元运算表达式
    • switch (expression){case VALUE stetement;case VALUE stetement ...} switch多分支语句
    • break``continue``exit 循环控制语句
    • delete array[index]``delete array 删除数组或数组元素
    • next 提前结束本行处理 进入下一行处理

    awk数组

    • 如果数组元素事先不存在,在调用时会自动创建此元素,并将其初始化为空值
    • 在awk的数值运算中,任意字符串均被隐式转换为0
    • 判断数组中是否存在某元素使用index in array,返回bool值
    # 统计当前各网络状态数量
    [root@stardust ~]# netstat -a |awk '/^tcp/ {state[$NF]++} END { for (a in state) print a,state[a] }'
    
    # 统计文件各单词的出现数量
    [root@stardust ~]# awk '{for(i=1;i<=NF;i++){S[$i]++}} END{for(a in S)print a,S[a]}' FILE

    awk常用内置函数

    • rand() 返回0-1间的随机浮点数
    • length() 获取字符串长度
    • sub() 字符串查找替换
    • gsub() 全局字符串查找替换
    • split() 字符串切割
    • system() 执行系统命令

    <wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">





  • 相关阅读:
    Rose 公司系统高可用性解决方案比较
    时序数据库有哪些特点? TimescaleDB时序数据库介绍
    EterneMirrorHA简介
    SpringBoot无法访问接口,报错:This application has no explicit mapping for /error, so you are seeing this as a fallback.
    druid对数据库密码进行加密解密
    Intellij Idea新建 SpringBoot 项目
    IDEA启动项目报错:Caused by: java.io.FileNotFoundException: class path resource [.properties] cannot be opened because it does not exist
    Dubbo添加过滤器(二)日志打印接口耗时
    SpringBoot2.X整合集成Dubbo
    shell 脚本执行带参数的hivesql
  • 原文地址:https://www.cnblogs.com/hemingyuan/p/7914790.html
Copyright © 2020-2023  润新知