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

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

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


 

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:

 

8printf格式化输出

[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,初始值为0action{}中可以有多条语句,每条以;号隔开。

 

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 {}中还可使用循环语句,判断语句等

 

 


目录
相关文章
|
1天前
|
Linux
Linux系统ps命令
这些是一些常见的 `ps`命令选项和用法,用于查看系统中运行的进程及其相关信息。您可以根据需要选择合适的选项以满足您的任务要求。
5 0
|
1天前
|
存储 Linux Shell
linux课程第二课------命令的简单的介绍2
linux课程第二课------命令的简单的介绍2
|
1天前
|
Linux C语言 数据安全/隐私保护
linux课程第二课------命令的简单的介绍3
linux课程第二课------命令的简单的介绍3
|
1天前
|
监控 Unix Linux
如何使用 Linux less 命令?
【4月更文挑战第25天】
8 1
如何使用 Linux less 命令?
|
1天前
|
JSON 网络协议 Linux
Linux ip命令:网络的瑞士军刀
【4月更文挑战第25天】
8 1
|
1天前
|
安全 Linux C语言
linux课程第一课------命令的简单的介绍
linux课程第一课------命令的简单的介绍
|
2天前
|
SQL 缓存 监控
|
2天前
|
前端开发 Linux Shell
|
2天前
|
网络协议 Linux Shell
|
2天前
|
NoSQL Linux Shell
2.Docker常用命令(linux)
2.Docker常用命令(linux)