Linux 三剑客 - awk 使用笔记

AWK使用笔记

参考资料

man awk

用法

awk options programs file
example:
awk -F ":" '{print $1,$4}' log.txt

  • options
    • -F: 以什么为分隔符, 默认是空格, 指定的话可以用 -F “:”
  • programs
    • 格式1: ‘/正则表达式/{}’
    • 格式2:
      ' {Begin{}{}END{}}'
  • file: 文件名字, 如果没有, 可以使用管道符之前输出的东西
    awk是一行一行读取的,如果要处理读取全部文件后的内容, 放在END里

语法

字段变量

  • $0: 整行
  • $1: 第一个字段
  • $2: 第二个字段
  • $n: 第N个字段

-F

-F 表示以什么来分隔, 默认是" "

内置变量 - 分隔符

  • FS: field separator, 输入字段分隔符, FS=“\t”
  • OFS: output field separator, 输出字段分隔符, OFS=" "
  • RS: record separator, 输入记录分割符, RS=“\n”
  • ORS: output record separator, 输出字段分隔符,ORS=“\n”
  • NR: ordinal number of the current record, 行
  • NF: number of fields in the current record, 列

条件与循环

放在program里;{}

  • if
    if(a<10){ print $0}
  • for
    for(i=0;i<M;i++){ print $i}

数组

参考资料: AWK 数组 | 菜鸟教程

单个数组

  • 创建: array[index]=value
    • index 可以是数字, 也可以是string, 相同的index的值会被覆盖
  • 打印数组: for(var in array){print var, array[var]}
    • var 是 index, array[var]是value
    • 打印的数组是无序的,如果要有顺序, 使用asort或者asorti

多维数组

练习题: leetcode->shell->194 转置文件

  • 创建: array[index1, index2]=value
    -第一行: 0,0 0,1 0,2 0,3…
    第二行: 1,0 1,1 1,2 1,3…
  • 打印多维数组:
    for(i=0;i<M;i++){ for(j=0;j<N;j++){ print arr[i,j] } }