首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux awk命令常见使用方法介绍

Linux awk命令常见使用方法介绍

作者头像
授客
发布2019-09-11 14:10:14
4760
发布2019-09-11 14:10:14
举报
文章被收录于专栏:授客的专栏授客的专栏

awk运行方式有三种,其中常用的为命令行方式

awk [-F field_separator] '{pattern + action}' input_file(s)

其中,其中 pattern 表示awk需要查找的内容,由符号//包围,形如 /^shouke/,而 action 是在找到匹配内容时所执行的一系列命令,[-F field_separator]可选,input-file(s) 是待处理的文件。

通常,awk是以文件的一行为处理单位的。awk每接收文件的一行,然后执行相应的命令来处理文本。

在awk中,文件的每一行中,由域分隔符(field_separator,默认为空格)分开的每一项称为一个域。

[root@localhost ~]# touch testfile

[root@localhost ~]# vim testfile

id name sex addr hobby

1 name:shouke sex:男 addr:深圳 hobby:music

2 name:laiyu sex:女 addr:云南 hobby:none

例子1:不指定分割符,从文件读取数据(awk '{action}' input_file(s)

[root@localhost ~]# awk '{print $1, $2}' testfile

id name

1 name:shouke

2 name:laiyu

说明:awk工作流程是这样的:读入由换行符'\n'分割的一条记录,然后将记录按指定的域分隔符划分域,填充域($0则表示所有域,$1表示第一个域,$n表示第n个域),接着读取下一条记录,重复前面的操作。默认域分隔符是"空白键" 或 "tab键"

例子2:指定分隔符,从文件读取数据(awk -F field_separator '{action}' input_file(s)

[root@localhost ~]# awk -F ':' '{print $1, $2}' testfile

id name sex addr hobby

1 name shouke sex

2 name laiyu sex

例子3:从命令输出结果读取数据

[root@localhost ~]# cat testfile | awk '{print $2, $3}'

name sex

name:shouke sex:男

name:laiyu sex:女

例子4:格式化输出

[root@localhost ~]# cat testfile | awk '{print $2"\t"$3}'

name sex

name:shouke sex:男

name:laiyu sex:女

例子5: 指定初始操作和结尾操作

[root@localhost ~]# cat testfile | awk 'BEGIN {print "first"} {print $2,$3} END {print "finally"}'

first

name sex

name:shouke sex:男

name:laiyu sex:女

finally

例子6:指定pattern模式(awk [-F field_separator] '{pattern}' input_file(s)

[root@localhost ~]# cat testfile | awk '/laiyu/'

2 name:laiyu sex:女 addr:云南 hobby:none

说明:

1.例子为搜索文件中所有包含pattern即字符串“laiyu”的行记录,仅匹配了pattern(例中为laiyu)的行才会执行action(这里没有指定action,默认输出每行的内容)。

2.搜索支持正则,例如找laiyu开头的: cat testfile | awk '/^laiyu/'

例7:指定pattern+action模式(awk [-F field_separator] '{pattern+action}' input_file(s) [root@localhost ~]# cat testfile | awk '/laiyu/{print $2, $3}'

name:laiyu sex:女

例8:printf格式化输出

[root@localhost home]# cat testfile | awk '{print $2}' | awk -F ':' '{printf("newname:%5s, oldname:%5s\n", $2, $2)}'

newname: , oldname:

newname:shouke, oldname:shouke

newname:laiyu, oldname:laiyu

newname: , oldname:

例9:自定义变量

[root@localhost home]# cat testfile | awk 'BEGIN {num=0;}{num=num+1;} END{print "rows of record have been read is: " num}'

rows of record have been read is: 4

说明:例中自定义了一个变量:num,初始值为0。action{}中可以有多条语句,每条以;号隔开。

例10:使用内置变量

[root@localhost home]# cat testfile | awk '{print "rows of record have been read is: " NR}'

rows of record have been read is: 1

rows of record have been read is: 2

rows of record have been read is: 3

rows of record have been read is: 4

说明:处理$0等变量,awk还有其它内置变量,比如 NR--读取的记录数,FILENAME--awk浏览的文件名

除此之外,action {}中还可使用循环语句,判断语句等

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-11-28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档