码迷,mamicode.com
首页 > 系统相关 > 详细

linux学习-awk工具

时间:2018-07-16 16:21:50      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:基于   年龄   方式   一个开始   print   示例   分割   ota   位置   

    awk是基于列的文本处理工具,它的工作方式是按行读取文本并视为一条记录,每条记录以字段分割成若干字段,然后输出个字段的值,事实上,awk是一种编程语言。awk认为文件都是结构化的,也就是说由单词和各种空白字符组成的,这里的‘空白字符’包括空格,Tab,以及连续的空格和tab等。每个非空白的部分叫做域,从做到右依次是第一个域,第二个域,等等。$1、$2分别用于表示域,$0则表示全部域。

首先创建Awk.txt文件,文件内容如下所示:

john.wang	Male	30	021-1111111
lucy.yang	Female	25	021-2222222
jack.chen	Male	35	021-3333333
lily.gong	Female	20	021-4444444	ShangHai


打印指定域

    既然awk使用$1,$2代表不同的域,则可以打印指定域。拿Awk.txt的第一行来说,第一个域为john.wang,第二域为Male,第三个域为30,第四个域为021-1111111。在下面的演示中,第一条命令打印了$1、$4这两个域,而第二条命令打印了全部的域。

#只打印姓名和电话号码
awk '{print $1,$4}' Awk.txt

技术分享图片

#打印全部内容
awk '{print $0}' Awk.txt

技术分享图片


指定打印分隔符

    默认情况下awk是使用空白字符作为分隔符的,但是也可以通过-F指定分隔符,来区分不同的域

#指定“.”作为分隔符,这样每一行的$1就是“.”之前的字符,$2就是“.”之后的字符
比如说第一行的$1是"john",$2是"Male     30    02101111111"
awk -F. '{print $1,$2}' Awk.txt

技术分享图片


内部变量NF

    有时候文件很大,每行列数都不一样,必须通过特定的方式获取文件列数。通过awk的内部变量NF可以简单的做到这一点。当然,如果你指定了不同的分隔符,结果可能不一样。

#使用默认分隔符
awk '{print NF}' Awk.txt

技术分享图片

#使用指定分隔符
awk -F. '{print NF}' Awk.txt

技术分享图片

打印固定域

    通过内部变量可以简单的得到每行的列数,而如果在NF之前加上$符号,则代表的是“最后一列”,这样不管每行有多少列,只要使用$NF就能打印最后一行。

#打印最后一列
awk '{print $NF}' Awk.txt

技术分享图片

#打印倒数第二行
awk '{print $NF}' Awk.txt

技术分享图片


截取字符串

    可以使用substr()函数对指定域截取字符串,该函数的基本使用方法如下:

substr(指定域,第一个开始字符的位置,第二个结束的位置),其中第二结束的位置可以为空,这样默认的输出到该域的最后一个字符

下例将输出Awk.txt文件第一个域的第六个字符到最后一个字符的内容:

#注意,第二个结束位省略,所以结束位置为第一个域的最后一个字符
cat Awk.txt | awk '{print substr($1,6)}'

技术分享图片


确定字符串长度

    使用内部变量length可以确定字符串的长度,示例如下:

cat Awk.txt | awk '{print length}'

技术分享图片


使用awk求列和

        结构化的数据是非常常见的,在日常工作中,经常有将其中的数据进行相加的需求,以下为对Awk.txt中年龄进行的一些计算。请注意,年龄字段是第三个域。

#求年龄的和
cat Awk.txt | awk 'BEGIN{tolal=0}{total+=$3}END{print total}'
#求平均年龄
cat Awk.txt | awk 'BEGIN{tolal=0}{total+=$3}END{print total/NR}'


linux学习-awk工具

标签:基于   年龄   方式   一个开始   print   示例   分割   ota   位置   

原文地址:http://blog.51cto.com/11555417/2144528

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!