AWK的使用方法

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

一.基础知识
awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本。

awk其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母。实际上 AWK 的确拥有自己的语言: AWK 程序设计语言 , 三位创建者已将它正式定义为“样式扫描和处理语言”。它允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。

二.用法介绍
1.命令格式

awk '{pattern + action}' {filenames}    ##pattern表示类,action表示执行的动作

pattern表示AWK在数据中查找的内容,action表示在找到匹配内容时所执行的一系列命令。
pattern就是要表示的正则表达式,用斜杠括起来,‘pattern‘。
通常,awk是以文件的一行为处理单位的。awk每接收文件的一行,然后执行相应的命令,来处理文本。

2.awk的三种调用方式
2.1 命令行方式

awk [-F  field-separator]  'commands'  input-file(s)
##commands 是真正awk命令,[-F域分隔符]是可选的。 input-file(s) 是待处理的文件。
在awk中,文件的每一行中,由域分隔符分开的每一项称为一个域。通常,在不指名-F域分隔符的情况下,默认的域分隔符是空格。

2.2 shell 脚本方式

将所有的awk命令插入一个文件,并使awk程序可执行,然后awk命令解释器作为脚本的首行,一遍通过键入脚本名称来调用。
相当于shell脚本首行的:#!/bin/sh
可以换成:#!/bin/awk

2.3 将所有的awk命令插入一个单独文件,然后调用:

awk -f awk-script-file input-file(s)
其中,-f选项加载awk-script-file中的awk脚本,input-file(s)跟上面的是一样的。

三.实例应用
3.1 简单实例

[root@server1 ~]# last -n 5    ##显示登陆过的用户,即取出前五行
root     pts/0        172.25.66.250    Tue Aug 15 08:12   still logged in   
reboot   system boot  3.10.0-327.el7.x Tue Aug 15 08:12 - 11:26  (03:14)    
root     pts/0        172.25.66.250    Mon Aug 14 04:08 - 10:56  (06:47)    
root     pts/0        172.25.66.250    Mon Aug 14 03:17 - 04:08  (00:51)    
root     tty1                          Mon Aug 14 03:13 - crash (1+04:58) 

如果要求只显示帐号,该怎么做呢?

[root@server1 ~]# last -n 5 | awk '{print $1}'
root
reboot
root
root
root

显示原理:awk读入’\n’换行符分割的一条记录,然后将记录按指定的域名分隔符划分域(没有指定则默认为空格),0,1表示第一个域,nn"""[tab]",1表示登录用户,$3表示登录用户ip,以此类推.
因此如果我们需要显示/etc/passwd的账户,使用下面的命令:

cat /etc/passwd |awk  -F ':'  '{print $1}'  ##这里指定了“:“为分隔符

那如果要显示/etc/passwd的帐号和帐号对应的shell,而帐号与shell之间以tab键分隔

[root@server1 ~]# cat /etc/passwd  |awk  -F ':'  '{print $1"\t"$7}'
root    /bin/bash
bin /sbin/nologin
daemon  /sbin/nologin
adm /sbin/nologin
lp  /sbin/nologin
sync    /bin/sync
##-F 指定分隔符为“:", "\t"表示显示内容之间以tab隔开

当然这里也可以用别的符号分隔,下面为我们举几个例子:

[root@server1 ~]# cat /etc/passwd |awk  -F ':' '{print $1","$7}'##这里我们用隔开逗号隔开
root,/bin/bash
bin,/sbin/nologin
daemon,/sbin/nologin
adm,/sbin/nologin
lp,/sbin/nologin
sync,/bin/sync
这里写代码片

搜索/etc/passwd有root关键字的所有行:

[root@server1 ~]# awk -F: '/root/' /etc/passwd ##指定关键字时关键字需要用单引号引住
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

搜索/etc/passwd有root关键字的所有行,并显示对应的shell:

[root@server1 ~]# awk -F: '/root/{print $7}' /etc/passwd
/bin/bash
/sbin/nologin
##这种是pattern的使用示例,{print $7}即为axtion,匹配了pattern(这里是root)的行才会执行action(没有指定action,默认输出每行的内容)。
[root@server1 mnt]# cat passwd | awk -F : '/root/'
root:x:0:0:root:/root:/bin/bash
root:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
##输出包含root的行

搜索以root开头的行:

[root@server1 ~]# awk -F: '/^root/' /etc/passwd
root:x:0:0:root:/root:/bin/bash

3.2 awk内置变量
awk有许多内置变量用来设置环境信息,这些变量可以被改变,下面给出了最常用的一些变量。

ARGC               命令行参数个数
ARGV               命令行参数排列
ENVIRON            支持队列中系统环境变量的使用
FILENAME           awk浏览的文件名
FNR                浏览文件的记录数
FS                 设置输入域分隔符,等价于命令行 -F选项
NF                 浏览记录的域的个数
NR                 已读的记录数
OFS                输出域分隔符
ORS                输出记录分隔符
RS                 控制记录分隔符
##同样的,$0变量是指整条记录。$1表示当前行的第一个域,$2表示当前行的第二个域,......以此类推。

如:
FILENAME的应用:

[root@server1 ~]# awk -F ':' '{print FILENAME}' /etc/passwd    ##输出文件名
/etc/passwd
/etc/passwd
/etc/passwd
/etc/passwd
/etc/passwd
/etc/passwd

NR的应用:

[root@server1 ~]#  awk -F ':' '/root/{print NR}' /etc/passwd
1
10
##找出/etc/passwd文件中的有root的行并输出对应的行数

NF应用:

[root@server1 ~]#  awk -F ':' '{print $NF}' /etc/passwd
/bin/bash
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/sync
##显示最后一列,$NF表示最后以列

如果要显示倒数第二列,将NF(NF-1)即可,其他依次类推

[root@server1 ~]#  awk -F ':' '{print $(NF - 1)}' /etc/passwd
/root
/bin
/sbin
/var/adm
/var/spool/lpd
/sbin

3.4 awk脚本基本结构
格式:

awk 'BEGIN{ print "start" } pattern{ commands } END{ print "end" }' file
一个awk脚本通常由:BEGIN语句块,能够使用模式匹配的通用语句块,END语句块三部分组成,这三部分都是可选的,脚本通常用单引号或双引号引住。
zgon

eg:

[root@server1 mnt]# awk 'BEGIN{ i=0 } { i++ } END{ print i }' passwd ##输出行数
21

awk工作原理:
第一步:执行BEGIN语句块中的内容
第二步:从文件中中读取一行,然后执行pattren语句块,一行一行的读文件,直到结束
第三步:第二步结束后,执行END语句块

awk基本用法、awk应用案例及综合脚本 如果要输出到屏幕可以使用命令awk '{a[$1]++}END{print a["abc"]}' shu.txt。按照awk逐行处理的工作特点使用awk '{a[$1]++}' shu.txt 走完每一行得到下列结果。准备一个文档,里面有6行,每行分别是abc、xyz、abc、opq、xyz、abc 然后。用法格式:BEGIN{ 任务1 }{ 任务2 }END{ 任务3 }BEGIN任务 执行1次,读取文档之前执行。END任务 执行1次,读取文档之后执行。 阅读详情

相关推荐

AWK基础教程

前言 之前针对WorkerHub小程序做的数据分析文章 XXX 收到了一些小伙伴的回复,点名要学习数据分析,其实我也是一知半解,想着来写几篇文章简单聊下我分析的过程。 首先是数据清洗和统计了,这块我并没有用诸如Python之类的脚本语言,虽然Python提供了很多强大的数据分析库如Pandas、Numpy等,但是毕竟要麻烦一些,还要写个脚本,装一堆库(PS:其实就是懒)。 我用的是一个老的Unix工具 AWK,虽然历史比较久远,但是它简洁和丰富的功能可以称之为神器,同时也是后台同学必须要掌握的一个工具

qijigougou的博客 2169

【shell】awk基本用法

awk基本用法及举例

sodaloveer的博客 3207

awk使用

linux里面的awk命令

xiaoliu的博客 3097

awk用法

&“表示"与”、“||表示"或”、"!还可以进行简单的数学运算,如+、一、*、/、%、^分别表示加、减、乘、除、取余和乘方。逐行读取文本,默认以空格或tab键为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令。awk信息的读入也是逐行读取的,执行结果可以通过print的功能将字段数据打印显示。当读到第一行时,匹配条件,然后执行指定动作,再接着读取第二行数据处理,不会默认输出。其他内置变量的用法FS(输入)、OFS、NR、FNR、RS、ORS。AWK 工作通过三个步骤。

yangye2424637628的博客 2396

AWK命令的使用方法

AWK命令使用指南:1.默认输出整行($0)或指定列($1);2.使用{}定义动作块,BEGIN/END进行预处理和后处理;3.支持多种匹配方式:字段匹配、范围匹配、复合条件、行号匹配等;4.常用选项:-F指定分隔符,-v定义变量;5.内置变量说明:$0整行、NR行号、NF字段数等;6.注意事项:变量名需大写,print语法区分列与数值输出。本文详细介绍了AWK的基本语法和实用技巧,适用于文本处理场景。

2201_75486314的博客 1134

awk if 使用方法

awk if 使用方法 例如筛选tcp中接受或发送的有堆积的链接情况:$ netstat -tanp | awk '{if ($2 > 0 || $3 > 0) print $0}' Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp

大叶子不小的博客 1468

awk使用方法详解

awk工具 awk 选项 ‘模式或条件{编辑命令}’ 文件1 文件2…. //过滤并输出文件中符合条件的内容 awk -f 脚本文件 文件1 文件2… //从脚本中调用的编辑指令,过滤并输出内容 awk包含几个特殊的内建变量(可直接用)如下所示: FS:指定每行文本的字段分隔符,默认为空格或制表位; NF:当前处理的行的字段个数; NR:当前处理的行的行号(序数); $0:当前处理的行的整行内容; $n:当前处理的行的第n个字段(第n列); FILENAME:被处理文件名; RS:数据记录分隔,默认为\n

empty_csx的博客 3516

awk 使用方法

一、awk说明 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理使用方法awk ‘{pattern + action}’ {filenames} 说明:其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令,括号({})不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令

qq_41755706的博客 432

awk使用方法笔记

 awk 最基本的功能是在输入文件中按行匹配指定的字符串格式,如果匹配则将当前行复制到缓冲区进行进一步处理,但并不改变输入文件本身。awk匹配每一行(称为Record)后,使用默认或指定的分割符自动将其分割为若干段(称为Field),每一段可使用 $number 进行引用和访问。其中段号0对应整个Record的内容。处理完成每一行后继续读入下一行进行处理

Live and Learn 1143

awk使用方法

awk 使用方法 awk ‘{pattern + action}’ {filenames} 尽管操作可能会很复杂,但语法总是这样,其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令。花括号({})不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。 pattern就是要表示的正则表达式,用斜杠括起来。 awk语言的最基本...

weixin_40083227的博客 474

AWK使用方法总结

1. awk最基本的功能是在输入文件中按行匹配指定的字符串格式,如果匹配则将当前行复制到缓冲区进行进一步处理,但并不改变输入文件本身。awk匹配每一行(称为Record)后,使用默认或指定的分割符自动将其分割为若干段(称为Field),每一段可使用$number进行引用和访问。其中段号0对应整个Record的内容。处理完成每一行后继续读入下一行进行处理awk命令的一般格式为 awk

dxm2025的专栏 329

AWK使用方法

转载,非原创 https://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html 简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk,gawkAWK 的 GNU 版本。 awk其名称得自于它的

weixin_43461612的博客 358

【Linux】awk命令使用方法

awk使用方法 简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk,gawkAWK 的 GNU 版本。 awk其名称得自于它的创始人 Alfre...

小哲的博客 5733

awk使用方法

简介   awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。   awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk,gawkAWK 的 GNU 版本。   awk其名称得自于它的创始人 Alfr

一切是我的成就感 516

awk工具使用方法及案例

awk是功能强大的编辑工具,在无交互的情况下实现复杂的文本操作。它是专门为文本处理设计的编程语言,也是处理软件,通常用于扫描、过滤、统计汇总工作,数据可以来自标准输入也可以是管道或文件。...

qq_44239779的博客 939

awk使用方法与案例介绍

awk使用方法与案例介绍 一、awk简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理awk有3个不同版本:awk、nawk和gawk,未作特别说明,一般指gawk,gawkAWK 的 GNU 版本。 awk其名称得自于它的...

wzlsunice88的博客 194

awk命令使用方法

awk 是一种强大的文本处理工具,可以用于处理结构化的文本数据。它可以根据指定的模式和动作来筛选、处理和格式化文本。

执笔阑珊的博客 1195
上一篇: Linux中top显示的信息详解
下一篇: sed命令该如何使用
csdn066
博客等级 码龄9年 113粉丝 96原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值