• 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}

    {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

  • 相关阅读:
    图数据库-Neo4j使用
    [原创]networkx 画中文节点
    python networkx:绘制网络图
    Python二维数组,坑苦了
    xgboost
    python 机器学习
    计算机网络知识
    前端优化不完全指南(转)
    FlashFXP 4.3.1 注册码
    你真的会使用Chrome开发者工具吗?
  • 原文地址:https://www.cnblogs.com/mrhonest/p/11758105.html
Copyright © 2020-2023  润新知