Linux Linux 三剑客 - awk 使用笔记

bobo · 2020年05月21日 · 1372 次阅读

AWK 使用笔记

参考资料

https://blog.csdn.net/u010502101/article/details/81839519
https://www.zhihu.com/search?type=content&q=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}

数组

参考资料: https://www.runoob.com/w3cnote/awk-arrays.html

单个数组

  • 创建: 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] } }
暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册