鸟哥书籍awk工具学习

awk工具

awk也是一个很好的数据处理工具。相比于sed常常作用于一整行的处理,awk则比较倾向于将一行分成数个字段来处理。因此,awk相当适合处理小型的数据。awk通常的运行模式是这样的:

[[email protected] opt]#awk ‘条件类型1{动作1}条件类型2{动作2}‘ filename

awk后面接两个单引号并加上大括号{}来设置想要对数据进行的处理动作。qwk可以处理后续接的文件,也可以读取来自前个命令的standardoutput。但如前面说的,awk主要是处理每一行内的数据,而默认的字段的分隔符为空格键或[tab]键。举例来说,我们用last可以将登陆者的数据读取出来,结果如下所示:

[[email protected] opt]# nl passwd | sed -n ‘$p‘

37 #This is a test

[[email protected] opt]# last -n 5

root     pts/0        192.168.211.1    Tue Apr 12 09:14   still logged in

reboot   system boot  2.6.32-431.el6.x Tue Apr 12 09:03 - 16:17 (1+07:13)

root     pts/0        192.168.211.1    Mon Apr 11 09:57 - crash  (23:05)

reboot   system boot  2.6.32-431.el6.x Mon Apr 11 09:56 - 16:17 (2+06:20)

root     pts/0        192.168.211.1    Mon Mar 28 21:47 - crash (13+12:09)

wtmp begins Sun Jan 24 00:22:20 2016

[[email protected] opt]# last -n 5| awk ‘{print $1 "\t" $3}‘

root 192.168.211.1

reboot boot

root 192.168.211.1

reboot boot

root 192.168.211.1

wtmp Sun

我仅想要取出账号与登陆者信息,且账号与IP之间以[tab]隔开,则会变成如下图:

[[email protected] opt]# last -n 5| grep root |awk ‘{print $1 "\t" $3}‘

root 192.168.211.1

root 192.168.211.1

root 192.168.211.1

awk最常使用的动作。通过Print的功能将字段数据列出来!字段的分隔则以空格或[tab]按键来隔开。因为不论哪一行都要处理,都要处理,因此,就不需要条件类型的限制!我们想要的是第一列和第三列,但是如上红字体的为什么和别的不一样呢?这是因为数据格式的问题。所以在使用awk的时候,要先确认一下数据,如果是连续的数据,不要有空格或[tab]在内,否则,就会出现那样的情况

另外,由上面的例子也会知道,在每一行的每个字段都是有变量名称的,那就是$1 $2等变量名称。以上面的例子来说,root就是$1,因为他是第一列!192.168.211.1是第三列,所以就是$3,后面以此类推。还有各变量,就是$0,他代表一整行数据的意思。以上面的例子来说,第一行的$0代表的就是“root”那

一行。由此可知,刚才上面五行当中,整个awk的处理流程是:

1、读入第一行,并将第一行的数据填入$0,$1,$2等变量中;

2、依据条件类型的限制,判断是否需要进行后面的动作;

3、做完所有的动作与条件类型;

4、若还有后续的“行”的数据,则重复上面1-3的步骤,直到所有的数据读完为止。

经过这样的步骤,你会知道,awk是以行为一次处理的单位,而以字段为最小的处理单位。那么awk怎么知道我到底这个数据有几行几列呢?这就需要awk的内置变量的帮忙了,

NF    每一行($0)拥有的字段总数。

NR    目前awk所处理的是“第几行”数据。

FS     目前的分隔字符,默认是空格键。

列出每一列的账号(就是$1)

列出目前处理的行数(就是awk内的NR变量)

并且说明,改行有多少字段(就是awk内的NF变量)

要注意,awk后续的所有动作是以单引号括住的,由于单引号与双引号都必须是成对的,所以,awk的格式内容如查想要以print打印时,记得非变量的文字部分,包含一小节printf提到的格式中,都需要使用双引号来定义出来,因为单引号已经是awk的命令的固定用法。

[[email protected] opt]# last -n 5| grep root |awk ‘{print $1 "\t lines:" NR "\t colums:" NF}‘

root lines:1 colums:10

root lines:2 colums:10

root lines:3 colums:10

awk的逻辑运算符

[[email protected] opt]# cat passwd | awk ‘{FS=":"} $3<10 {print $1 "\t" $3}‘

root:x:0:0:root:/root:/bin/bash

bin 1

daemon 2

adm 3

lp 4

sync 5

shutdown 6

halt 7

mail 8

怎么第一行没有正确的显示出来呢?这是因为我们读入第一行的事后,那些变量$1,$2默认还是以空格键为分隔的,所以虽然我们定义了FS=“:“了,但是却仅能在第二行后才开始生效。那怎么办呢?我们可以预先设置awk变量!利用BEGIN这个关键字,这样做

[[email protected] opt]# cat passwd | awk ‘BEGIN {FS=":"} $3<10 {print $1 "\t" $3}‘

root 0

bin 1

daemon 2

adm 3

lp 4

sync 5

shutdown 6

halt 7

mail 8

除了BEGIN之外,还有END呢!另外,如果要用awk来进行“计算功能”呢?

[[email protected] opt]# cat pay.txt|awk ‘NR==1{printf "%10s %10s %10s %10s %10s\n",$1,$2,$3,$4,"total"}\

> NR>=2{total = $2+$3+$4\

> printf "%10s %10d %10d %10d %10.2f\n",$1,$2,$3,$4,total}‘

所有awk的动作,即在{}内的动作,如果有需要多个命令辅助时,可利用分号;分隔,或者直接以【enter】的按键来隔开每个命令,例如上面

逻辑运算中,如果是“等于”的情况,务必使用两个等号“==”

格式化输出时,在printf的格式设置当中,务必加上\n,才能进行分行

与bash,shell的变量不同,在awk中,变量可以直接使用,不需要加上$符号。

时间: 2024-10-19 20:30:22

鸟哥书籍awk工具学习的相关文章

Linux随笔-鸟哥Linux服务器篇学习总结(全)

鸟哥Linux服务器篇学习总结 作者:Danbo 时间:2015-7-17 在runlevel3启动级别下默认启动网络挂载(autofs)机制,我们可以通过命令将其关闭:chkconfig autofs off 或者 /etc/init.d/autofs stop将其关闭. 查询启动在网络监听的服务:netstat -lntup[[email protected] ~]# netstat -lnutpActive Internet connections (only servers)Proto

跟鸟哥学Linux之——学习总结

整个下来看<鸟哥的Linux私房菜--基础篇>学习了很多的知识,从基本的Linux初步认识,到一些文件目录的认识和操作,一些基本命令的使用,最后初步认识了Linux中进程的操作和控制方法.现阶段对Linux基础的认识和学习就这些,下边是学习下来的博客总结: 1.跟鸟哥学Linux之--Linux规划!! 2.跟鸟哥学Linux之--从磁盘分区到文件系统 3.跟鸟哥学Linux之--浅谈文件权限 4.跟鸟哥学Linux之--对文件与目录操作命令汇总 5.跟鸟哥学Linux之--bash shel

根据鸟哥书籍学习 sed 工具的使用

sed工具 [[email protected] ~]#sed   [-nefr]  [动作] 参数: -n  : 使用安静模式.在一般sed用法中,所有来自STDIN的数据一般都会列出到屏幕上.但是如果加上-n参数后,则只有经过sed特殊处理的那一行(操作)才会被列出来. -e  :直接在命令行模式上进行sed的动作编辑. -f  :直接将sed的动作写在一个文件内,-f filename 则可以执行filename内的动作. -r  :  sed的动作支持的是扩展型正则表达式的语法(默认是基

鸟哥书籍 FTP 学习

FTP服务器 一.FTP服务器简介 FTP服务器的功能除了单纯地进行文件的传输与管理之外,依据服务器软件的配置架构,它还可以提供以下几个主要的功能: 1.不同等级的用户身份:user.guest.anonynous FTP服务器在默认的情况下,依据用户登录的情况,分为三种不同的身份,分别是实体用户real user,访客guest,匿名用户anonymous.这三种身份的用户在系统上面的权限差异很大,例如实体用户取得的系统权限比较完整,所以可以进行比较多的操作:至于匿名用户,大概我们就仅提供他下

鸟哥linux私房菜学习笔记,U盘安装centos5.3不能正常进入图形界面的问题

前面说过自己成功引导了centos系统,现在进入启动界面,首次进入会进行相关设置,按照步骤一步一步完成,取消完光盘安装,点击下一步,就进入下面这个界面,没有登录框...没错!怎么蓝屏了,这可是linux啊! 可能第一次初始化慢,然而十几分钟过去了,依旧一成不变...懵圈了,按书上切换命令行模式也没反应,重启了也是一样卡在这个界面,没办法了,我重装吧. 再次重装很顺利,然后启动,接着首次设置,最后...还是卡到了这个界面.不会是我U盘启动盘制作有问题吧,果断重新制作,然后再次重装启动...不出所料

每周一书-《鸟哥的Linux私房菜》获奖公布

<鸟哥的Linux私房菜>一书的赠书活动时间为2016年10月19日到10月31日, 也就是今天结束. 首先要感谢QQ号为:1084830483(路在远方),来自哈尔滨工程大学的同学赠送给玄魂工作室的读者的. 得到此书的同学请主动联系“路在远方”,表示感谢! 这本书得到了大家的积极响应,到目前为止共有1788人阅读推送的文章, 50人参与留言. 部分留言节选如下: 木易先森 从小接触计算机,从Windows97玩到现在的Win10.小学到高中都是班上的“大神”,别人电脑出了问题也都找我,我也就

鸟哥Linux私房菜知识点总结0到2章

感觉自己对Linux的理解一直不够,所以最近翻看了一本<鸟哥的Linux私房菜>.这是一本基础的书,万丈高楼平地起,会的不多但可以学.这是我整理的一些知识点,虽然很基础.希望和大家共同交流. 第0章计算机概述 1.计算机主要有三大部分组成:a.输入部分,包括键盘,鼠标... b.中央处理器(CPU):含有逻辑,控制,记忆等单元 c.输出单元:屏幕,打印机等 2.基本上数据都是流经过内存再转出去的. 3.硬盘最小的组成单元为扇区. 4.个人计算机的内存主要主件为动态随机访问内存,只有在通电时才能

拜师鸟哥之linux学习体会(1)——计算器概论

之前一段时间看了鸟哥的linux私房菜,觉得写得很好,是一本很好的初识linux系统的书籍.接下来的每一天我都会对这本书的每一章的重点知识进行叙述,也算是对学习这本书的一个体会吧.今天讲一下概述部分,鉴于linux是一个操作系统,所以有必要先介绍下计算机方面的知识. 1.    计算机主要由以下几部分组成:输入单元.输出单元.CPU内部的控制单元.算术逻辑单元和主存储器.可以通过下图来描述. 主要介绍下CPU部分,CPU有两种类别:精简指令集RISC和复杂指令集CISC. 2.    本章的一个

《鸟哥的Linux私房菜》学习笔记(0)

听说Linux已经有很长一段时间了,但是从未系统的学习过Linux.这次把在博客园的处女秀给了Linux,希望能够给自己学习Linux一种坚持的动力,坚持就是胜利,fighting! 在我看来,成为技术大牛之前,写博客主要是对自己所学的东西作以总结,涉及的东西也稍显浅薄,但是却能够为更深一步的学习打下基础,于是我选择了写博客!以前从未写过博客,博客给人第一印象——高大上,现在要写了,顿感压力山大,还好本人的初衷是为了知识的整理,暂时这样安慰一下我自己吧.初期的博客,我想肯定会是非常糟糕的,但是我