广告

原创 awk命令--学习笔记

2017-7-11 17:22 298 0 分类: 软件与OS

sed命令以行为单位,awk命令以列为单位。

awk按行读取文本并视为一条记录,每条记录以字段分割成若干字段,然后输出各字段的值。

awk的语法异常复杂,之前在看《鸟哥的Linux私房菜》时对其理解不深,现在结合《Linux系统命令其Shell脚本实践指南》再学习一遍。


awk认为文件都是结构化的,也就是说都是由单词和各种空白字符组成的,这里的“空白字符”包括空格、Tab,连续的空格和Tab等。非空白的地方叫做域,从左到右依次是第一个域、第二个域,表示为$1、$2等等,$0表示全部的域。


这里依然使用dmesg作为test文件:

$ dmesg >> dmesg.log



  1. 打印指定的域:

    $ awk '{print $1,$2,$3}' dmesg.log


  2. 使用" -F "指定分隔符:

    $ awk -F: '{print $1,$2}' dmesg.log


  3. 内部变量NF,获取域的个数:$ awk '{print NF}' dmesg.log

    打印最后一列域:$ awk '{print $NF}' dmesg.log

    打印倒数第二列域:$ awk '{print $(NF-1)}' dmesg.log


  4. substr函数,对指定域截取字符串:$ awk '{print substr($2,3)}' dmesg.log

  5. length变量,确定字符串的长度:$ awk '{print length}' dmesg.log


  6. 求列和:

    比如求dmesg.log里面第二列的和,先找出时间所在的列:

    $ cat dmesg.log

    [ 0.000000] microcode: microcode updated early to revision 0x9e, date = 2016-06-22

    [ 0.000000] Linux version 4.10.10-100.fc24.x86_64 (mockbuild@bkernel01.phx2.fedoraproject.org)

    ……

    $ awk -F[ '{print $2}' dmesg.log | awk -F] '{print $1}'

    0.000000

    0.000000

    $ awk -F[ '{print $2}' dmesg.log | awk -F] '{print $1}' | awk 'BEGIN{total=0}{total+=$1}END{print total}'

    1.47903e+07



awk命令处理文本也非常强大。配合sed使用,快捷方便。这样对文本的操作就不用每次都进入Vim了,在shell脚本里vim无用武之地,而awk和sed无往不利。


广告

文章评论 0条评论)

登录后参与讨论
相关推荐阅读
DiracFatCat 2018-09-05 12:14
【博客大赛】卡尔曼滤波学习笔记(11)从位置估计速度
卡尔曼滤波器,不仅仅是一个低通滤波器,否则也不会持续发展50年。 示例:桑先生需要测试高速列车的性能。测试的目的是判断列车在直线上能否保持80m/s的速度。速度和位置每0.1秒测量一次,...
DiracFatCat 2018-08-31 19:32
【博客大赛】卡尔曼滤波学习笔记(10)一个简单的示例
《Kalman Filtering: Theory and Practice Using MATLAB》第三章,看不懂,暂时略过。《Kalman Filtering: Theory and Pract...
DiracFatCat 2018-07-19 15:09
对sed命令的练习
sed是流编辑器。它每次处理一个输入,因此很有效率。官方手册:https://www.gnu.org/software/sed/manual/sed.html学习Linux命令,当然要阅读官方手册,所...
DiracFatCat 2018-06-19 15:10
【博客大赛】卡尔曼滤波学习笔记(八)可观测性和可控制性 ...
可观测性是指,在给定模型的情况下,动力学系统的状态是否由它的输入输出唯一确定。可观测性是系统模型的特征。如果传感器矩阵H是可逆的,则本系统可观测,因为有:如果传感器矩阵H某些时候是不可逆的,则本系统仍...
DiracFatCat 2018-06-19 10:56
【博客大赛】卡尔曼滤波学习笔记(七)Z变换
如果我们仅仅对离散线性系统感兴趣,那么就使用下面这个表达式:如果u是常量,那么可以写成:为了简化表达式,我们可以将上面写成:离散线性时不变系统的Φ求解,可以使用Z变换。(* 由于本人已经忘记了Z变换的...
DiracFatCat 2018-06-19 10:54
【博客大赛】卡尔曼滤波学习笔记(六)拉普拉斯变换
对于线性时变/时不变系统,求解Φ(t)有多种方式,拉普拉斯变换是其中一种。(* 由于本人已经忘记了拉普拉斯变换的内容,因此本节待续。)...
我要评论
0
0
广告
关闭 热点推荐上一条 /1 下一条