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]
}
}
↙↙↙阅读原文可查看相关链接,并与作者交流