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