shell 极速入门 命令篇(二)awk 命令简明语法

awk 命令简明语法

awk 的本质是一个表格行处理器,优点在于处理大文件时不会内存溢出,处理速度比较快。

概念

awk 相当于一个小型的编程语言,支持:

  • 样式装入
  • 流控制
  • 数学运算
  • 流程控制
  • 内置的变量和函数

基本用法

awk 每接受文件的一行,就会执行相应的命令。

awk '{pattern + action}' <file>

上述 pattern 代表在数据中要查找的内容,action 表示将要执行的一系列命令。

分隔符

awk 自动将一行分为多个字段,依次可以用 $1、 2 、 . . . 2、... 2...n 来表示第一个字段、第二个字段、第 n 个字段。

例1:获取字段

awk '{print $2, $4, $6} file.txt'

指定分隔符

使用参数选项

在上述的标准格式之外,可以使用标签来额外执行分隔符。

默认情况下,对于一个行,awk 默认使用空格和制表符\t 作为分隔符号,得到 $1, $2, $…

vel: 2.8, acc: 0.5

上述行中,可以将 : 和 , 符号都指定为分隔符号,如下:

awk -F ':|,' '{print $2, $4, $6}' file.txt

内置变量

除了 $1 之后的内置变量有:

  • $0:表示当前整行
  • NR:表示当前已读的行数
  • NF:表示当前行被分割的列数,NF 表示最后一列数,NF-1 表示倒数第二列数
  • FILENAME:表示当前文件的名称

例3:一次打印出文件名、已读行、最后一列的列数

awk '{print FILENAME, NR, NF, ":", $0}' log

条件变量

awk 中的 pattern 可以进行条件判断。

例4:打印 val 值小于 5.0 的行,如下:

awk '$2 < 5.0 {print $0}' log

统计值

pattern 部分可以使用流程,从而完成操作操作。

例5:快速计算最大值。

以下的 pattern 部分是循环,能够遍历所有行的 $2 第二列,判断得到最大值。

awk -F ':|,' 'BEGIN {max=0} {if($2>max) max=$2} END {print "max vel:", max}' log
awk -F ':|,' 'BEGIN {min=10} {if($4<min) min=$4} END {print "min acc:", min}' log
awk -F ':|,' 'BEGIN {sum=0} {sum+=$6} END {print "mean steer:", sum/NR}' log

输出控制

awk 支持 printprintf 两种打印输出函数。

  • print:输出变量、数值或字符串。
  • printf:用法类似于 c 语言。

例6:awk实现head、tail命令。

awk 'NR<=10{print}' filename

awk '{buffer[NR%10] = $0;} END{for(i=0;i<11;i++){ \
print buffer[i %10]} } ' filename

其他程序。

awk '{chars+=length($0)+1;words+=NF} END{print NR,words,chars}' $1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值