shell三剑客之awk(一)-创新互联

  • 概述

    创新互联公司服务项目包括金秀网站建设、金秀网站制作、金秀网页制作以及金秀网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,金秀网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到金秀省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

 awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本。  awk是一种优良的文本处理工具。简单来理解,awk逐行读入数据,将其赋给变量$0,然后对其进行切片处理,以$1,$2,..的切片形式,一段一段进行分析处理并输出。

  • 语法

 awk '{pattern + action}' 或者 awk 'pattern {action}'

 pattern 表示 AWK 在数据中查找的内容。

  action是在找到匹配内容时所执行的一系列命令。

  • 入门实例

1. 使用$0查看所要处理的文本内容

[root@chboa ~]# awk '{print $0}' test

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

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

sync:x:5:0:sync:/sbin:/bin/sync

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

halt:x:7:0:halt:/sbin:/sbin/halt

mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

2. awk + pattern,只是输出匹配行,不做其他处理

[root@chboa ]# awk -F: '/root/' test

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

3. awk + action,对所有行进行处理

[root@chboa ]# awk -F: '{print $1}' test

root

bin

daemon

adm

lp

sync

shutdown

halt

mail

uucp

4. awk '/pattern/{action}'匹配并处理输出

[root@chboa ]# awk -F: '/root/{print $7}' test

/bin/bash

5. 打印用户和所对应的bash,中间用tab分割

[root@chboa ~]# awk -F: '{print $1"\t"$7}' test

root   /bin/bash

bin   /sbin/nologin

daemon  /sbin/nologin

adm   /sbin/nologin

lp    /sbin/nologin

sync   /bin/sync

shutdown     /sbin/shutdown

halt   /sbin/halt

mail   /sbin/nologin

uucp   /sbin/nologin

  • awk内建变量

gawk数据字段和数据行变量
变量

功能

FIELDWIDTHS用空格分隔开的定义了每个数据字段确切宽度的一列数字
FS输入字段分隔符
RS输入数据行分隔符
OFS输出字段分隔符
ORS输出数据行分隔符
  • 实例

  1. 使用FS指定输入字段默认分隔符

[root@chboa sed.test]# awk 'BEGIN{FS=":"}{print $1,$2}' test

root x

bin x

daemon x

adm x

lp x

sync x

shutdown x

halt x

mail x

uucp x

2. 使用OFS指定输出字段分隔符,默认输出字段分隔符为空格

[root@chboa ~]# awk 'BEGIN{FS=":";OFS="-"}{print $1,$2,$3}' test

root-x-0

bin-x-1

daemon-x-2

adm-x-3

lp-x-4

sync-x-5

shutdown-x-6

halt-x-7

mail-x-8

uucp-x-10

3. 使用FIELDWIDTHS指定切分的固定宽度

[root@chboa ]# awk 'BEGIN{FIELDWIDTHS="6 2 3 3"}{print $1,$2,$3,$4}' test

root:x :0 :0: roo

bin:x: 1: 1:b in:

daemon :x :2: 2:d

adm:x: 3: 4:a dm:

lp:x:4 :7 :lp :/v

sync:x :5 :0: syn

shutdo wn :x: 6:0

halt:x :7 :0: hal

mail:x :8 :12 :ma

uucp:x :1 0:1 4:u

[root@chboa ~]# awk 'BEGIN{FIELDWIDTHS="6 5 8 2 1";OFS="--"}{print $1,$2,$3,$4,$5}' test

root:x--:0:0:--root:/ro--ot--:

bin:x:--1:1:b--in:/bin:--/s--b

daemon--:x:2:--2:daemon--:/--s

adm:x:--3:4:a--dm:/var/--ad--m

lp:x:4--:7:lp--:/var/sp--oo--l

sync:x--:5:0:--sync:/sb--in--:

shutdo--wn:x:--6:0:shut--do--w

halt:x--:7:0:--halt:/sb--in--:

mail:x--:8:12--:mail:/v--ar--/

uucp:x--:10:1--4:uucp:/--va--r

4. 有时候会遇到数据字段占用的多行的情况,经典例子:姓名,地址,电话号码在不同行。

目标:打印姓名,后面跟电话号码。

注解:下面这个实例awk把文件中的每一行都当成一个字段,空白行当做数据行分隔符。

[root@chboa ~]# cat phone

Myke John

Nanjing Road

(123)110110100

Xiao Ming

Zhengzhou

(456)120120100

[root@chboa ~]# awk 'BEGIN{FS="\n";RS=""}{print $1,$3}' phone

Myke John (123)110110100

Xiao Ming (456)120120100

gawk数据变量
变量功能
ARGC当前命令行参数个数
ARGV包含命令行参数的数组
ENVIRON当前shell环境变量及其值组成的关联数组
FILENAME用作gawk输入数据的数据文件的文件名
IGNORECASE设成非零值时,忽略gawk命令中出现的字符串的字符大小写
FNR当前数据文件中的数据行数
NR已处理的输入数据行的数目
NF数据文件中的字段总数
  • 使用内部变量,打印报表

[root@chboa ~]# awk -F: '{print "filename:"FILENAME",linenumber:"NR",columns:"NF",linecontent:"$0}' test

filename:test,linenumber:1,columns:7,linecontent:root:x:0:0:root:/root:/bin/bash

filename:test,linenumber:2,columns:7,linecontent:bin:x:1:1:bin:/bin:/sbin/nologin

filename:test,linenumber:3,columns:7,linecontent:daemon:x:2:2:daemon:/sbin:/sbin/nologin

filename:test,linenumber:4,columns:7,linecontent:adm:x:3:4:adm:/var/adm:/sbin/nologin

filename:test,linenumber:5,columns:7,linecontent:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

filename:test,linenumber:6,columns:7,linecontent:sync:x:5:0:sync:/sbin:/bin/sync

filename:test,linenumber:7,columns:7,linecontent:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

filename:test,linenumber:8,columns:7,linecontent:halt:x:7:0:halt:/sbin:/sbin/halt

filename:test,linenumber:9,columns:7,linecontent:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

filename:test,linenumber:10,columns:7,linecontent:uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


本文名称:shell三剑客之awk(一)-创新互联
链接地址:http://azwzsj.com/article/cespod.html