软件测试/测试开发|Linux三剑客之——awk命令详解

article/2025/6/8 14:22:10

简介

如果你是一位新手 Linux 用户,可能已经听说过 Awk 这个神奇的命令。Awk 是一种强大的文本处理工具,它可以在命令行中用于处理和分析文本数据。无论是数据提取、格式化、计算还是报告生成,Awk 都是个不可多得的工具。

什么是awk?

Awk 是一种面向文本处理的编程语言,最初由 Alfred Aho、Peter Weinberger 和 Brian Kernighan 在1977年开发。它以它们三人的姓氏首字母命名(Aho、Weinberger 和 Kernighan)。Awk 是一种解释型的语言,也是许多 Unix 系统中默认安装的工具之一。

awk的基本语法

语法格式:

awk 'pattern { action }' filename

语法说明:

  • pattern:用于匹配的条件;
  • action:满足条件后执行的操作;
  • filename:要处理的文件名。

注:awk命令还可以扩展为awk ‘BEGIN {commands} pattern {commands} END {commands}' filename ,即在处理数据前和处理数据后都需要执行命令。

示例如下:

$ cat /etc/passwd|awk -F ":" 'BEGIN{print "###start###"} $3>500&&$3<2000 {print $1,$3}END{print "###end###"}'

###start###

polkitd 999

chrony 998

xiaowang 1000

chenhang 1001

zhnagjian 1002

zhangjian 1003

wangshenghu 1004

yalin 1005

nginx 997

lilanqing 1006

califeng 1007

cali123 1008

shimengmeng 1010

zhouyiwei 1011

zhaojunjie 1013

kimi 1014

kimi2 996

linhucong 1015

kimi3 1016

feng2 1018

feng3 1019

feng4 1020

feng5 1021

liudehua 1022

liming 1023

libai 1024

xiaoxiao 1025

xiyangyang 1026

meiyangyang 1027

lanyangyang 1028

zhangwuji 1029

liang 1030

###end###

这条命令的要求是,获取etc/passwd的内容,并且打印出数值大于500小于2000的用户名及数值,在打印前输出start,打印结束后输出end。

awk的工作流程

由上面命令的执行效果,我们可以知道awk命令的工作流程如下:

  1. 执行BEGIN{commands}语句块中的语句;
  2. 从文件或stdin中读取第一行,看有无模式匹配,若无则执行{}中的语句;
  3. 若有则检查该整行与pattern是否匹配,若匹配,则执行{}中的语句;
  4. 若不匹配则不执行{}中的语句,接着读取下一行;
  5. 重复这个过程,直到所有行被读取完毕;
  6. 执行END{commands}语句块中的语句;
  7. BEGIN 和 END 部分只是执行一次;
  8. 中间部分每一行都执行一次。

指定分隔符

  1. -F 指定分隔符

awk命令的默认分隔符为空格,如下所示:

$ cat grade.txt | awk '{print $2,$3,$4}'

name chinese english

cali 80 80

tom 90 90

jarry 70 100

  1. 分隔符不是空白时候可以使用-F选项来指定分隔符,如下所示:

$ cat /etc/passwd | tail | awk -F ":" '{print $1,$3,$4}'

sanle 9931 9932

test 9932 9935

wang 9933 9933

zhao 9934 9934

bobo 9935 9936

hang 9936 9937

mysql 27 27

bailongma 9937 9938

baigujing 9938 9939

yutujing 9939 9940

awk命令应用

  1. awk进行计算

示例:统计uid>1000并且使用shell是bash的用户的数量

$ awk -F ":" '$3>1000&&$7 ~ /bash/{print $1,$3,$7; i++}END{print "uid大于1000并且shell是bash的人数有:"i"人"}' passwd

chenhang 1001 /bin/bash

zhnagjian 1002 /bin/bash

zhangjian 1003 /bin/bash

wangshenghu 1004 /bin/bash

yalin 1005 /bin/bash

lilanqing 1006 /bin/bash

califeng 1007 /bin/bash

cali123 1008 /bin/bash

shimengmeng 1010 /bin/bash

zhouyiwei 1011 /bin/bash

zhaojunjie 1013 /bin/bash

kimi 1014 /bin/bash

linhucong 1015 /bin/bash

kimi3 1016 /bin/bash

feng2 1018 /bin/bash

feng3 1019 /bin/bash

feng4 1020 /bin/bash

feng5 1021 /bin/bash

liudehua 1022 /bin/bash

liming 1023 /bin/bash

xiaoxiao 1025 /bin/bash

xiyangyang 1026 /bin/bash

meiyangyang 1027 /bin/bash

lanyangyang 1028 /bin/bash

zhangwuji 1029 /bin/bash

liang 1030 /bin/bash

user01 9901 /bin/bash

user02 9902 /bin/bash

user03 9903 /bin/bash

user04 9904 /bin/bash

user05 9905 /bin/bash

user06 9906 /bin/bash

user07 9907 /bin/bash

user08 9908 /bin/bash

user09 9909 /bin/bash

zhangheng 9921 /bin/bash

zhaomin 9922 /bin/bash

wuji 9923 /bin/bash

liangluyao 9924 /bin/bash

pingguo 9925 /bin/bash

jingshi 9926 /bin/bash

yueyang 9927 /bin/bash

tangpj 9928 /bin/bash

tangpz1 9929 /bin/bash

sc1 9930 /bin/bash

test 9932 /bin/bash

wang 9933 /bin/bash

zhao 9934 /bin/bash

bobo 9935 /bin/bash

hang 9936 /bin/bash

bailongma 9937 /bin/bash

baigujing 9938 /bin/bash

yutujing 9939 /bin/bash

rrrge 9940 /bin/bash

uid大于1000并且shell是bash的人数有:54人

  1. awk的if和for循环

if语句后面执行多个命令的时候,使用{}括起来,最后的命令接``结尾,外面的else if 和 else前面就不用再接;了,示例如下:使用awk命令来输出passwd文件里哪些是超级用户,系统用户,普通用户。

$ awk -F ":" '{if($3 ==0 ) print $1"是超级用户";else if($3>1&&$3<=999) print $1"是系统用户"; else print $1"是普通用户"}' passwd

root是超级用户

bin是普通用户

daemon是系统用户

adm是系统用户

lp是系统用户

sync是系统用户

shutdown是系统用户

使用awk命令来输出passwd文件里哪些是超级用户,系统用户,普通用户。并输出各用户的个数。

$ awk -F : '{if($3 == 0){print $1"是超级用户";num1++;}else if($3>1 && $3 <1000){print $1"是系统用户";num2++;}else{print $1 "是普通用户";num3++;}}END{print"超级用户有:"num1"系统用户有:"num2"普通用户有:"num3}' passwd

root是超级用户

bin是普通用户

daemon是系统用户

adm是系统用户

lp是系统用户

sync是系统用户

shutdown是系统用户

halt是系统用户

mail是系统用户

operator是系统用户

games是系统用户

tcpdump是系统用户

sanle是普通用户

test是普通用户

wang是普通用户

zhao是普通用户

bobo是普通用户

hang是普通用户

mysql是系统用户

bailongma是普通用户

baigujing是普通用户

yutujing是普通用户

rrrge是普通用户

mengmeng1是普通用户

mengmeng2是普通用户

mengmeng3是普通用户

超级用户有:1系统用户有:23普通用户有:63

总结

Awk 是一个功能强大且灵活的工具,在处理文本数据时非常有用。虽然这里只介绍了一些基本用法和常见应用,但 Awk 的功能远不止于此。通过不断练习和探索,你将发现 Awk 在处理文本数据时的无限可能性。希望本文能够帮到大家!


http://www.hkcw.cn/article/OyWShiKDXR.shtml

相关文章

【战术】低种族宝可梦的骄傲——脱壳忍者

大家好,这里波蕉曼s channel。本系列致力于介绍那些低种族(<450)却有着重要战略地位的宝可梦。 本期的主角是出生于第三世代的脱壳忍者。 (据说盯着脱壳忍者背后的🕳看,灵魂会被吸走哦!) 【能力分析】 脱壳忍者,俗称“鬼蝉”。按以往的惯例是先简单分析一下种族,…

清代 徐扬的宏伟画卷《姑苏繁华图》长卷,太美了

清代 徐扬的宏伟画卷《姑苏繁华图》长卷,太美了 清代 徐扬的宏伟画卷《姑苏繁华图》长卷,太美了!打开来自两百多年前的《姑苏繁华图》长卷,透过旧时墨色,走进这繁华之城,静穆间,仿佛听见了古运河中阵阵橹声,山塘街上悠悠丝竹,以及街市上的往来喧嚣……清代有位画家徐扬…

起底18888888888被1.2亿天价拍卖背后的靓号市场

手机现在大家几乎是人手一部,手机号码也是人人必备的。可是就这小小的手机号码,简单的十一个排列组合,在很多人手上就成了身份的象征,就像前阵子被曝光的一个手机号,价值1.2个亿,是全国最贵的一个手机号码,你见过吗? 前阵子有一个北京移动号码为18888888888,拍卖成交价…

2024秋统编版语文二年级上册电子课本(高清完整版)

人教版二年级上册语文电子课本可以方便大家随时随地预习或复习课本知识,为此,我们找到了人教版二年级上册语文电子书教材的全部内容,希望能够提高大家的学习效率。 如需全套小学电子课本PDF版,请关注公众号“桃李百科”回复:“电子课本” 人教版二年级上册语文电子课本在线…

【地理视野】关于对流层,你应该掌握的地理知识,有点超纲!

平时我们总说对流层对流层 但对流层究竟是个什么层你真的知道吗? 今天就和小编一起来了解一下~ 对流层在大气的最下层,从地球表面开始向空中伸展,直至对流层顶,即平流层的起点为止。它的厚度不一,在8至17千米之间,会随季节和纬度的变化而变化。对流层有以下几个特点 温度…

五岳归来不看山,黄山归来不看岳的意思

“五岳归来不看山,黄山归来不看岳。” 意思就是去过五岳之后,其他的山不过如此,无需再看;而看过黄山之后,发现五岳也不过如此了。表明黄山景观之胜。 五岳: 指东岳泰山、西岳华山、南岳衡山、北岳恒山和中岳嵩山,是我国历史上的五大名山。黄山:在安徽省南部。风景秀丽。…

原创三看《康熙王朝》:才懂葛尔丹死都不知道,是蓝齐儿的善良害了他

这个故事,它发生在清朝康熙年间,涉及一位皇帝、一个蒙古大汗以及一位美丽公主之间的纠葛。这是一个关于爱情、权力与抉择的故事,也是一段因善良而导致的悲剧。一、人物背景:身世的牵绊 在清朝康熙年间,紫禁城中有一位名叫蓝齐儿的公主。她是康熙皇帝的爱女,自小便展现出聪…

开国上将 陶峙岳

陶峙岳 (1892.09.18─1988.12.26),中国人民解放军开国上将,湖南省宁乡县仙凤乡人。在军旅生涯中,历任湖南省督军公署参谋处上尉参谋,谭延门岂部“护字营”营参谋长、营长,湘军营长、团长,国民革命军团长、副师长、师长、军长、副总司令、总司令等职。先后参加了护国护法…

高度期待!《Fate/EXTRA 重制版》2025年发售

《Fate/EXTRA 重制版》预计于2025年正式推出,将同步登陆PS5、PS4、Steam以及NS平台。今日,该游戏的全新宣传片已经公开。 在新宣传片中,我们能看到经过重新设计的战斗系统和地下城场景。此次发布的版本是2010年游戏《Fate/EXTRA》的全面升级版,相信会给玩家们带来全新的体验…

这种生物能在外太空存活,严寒酷暑都不怕,实在太可怕了

水熊虫又叫水熊,在地球上有着广阔的分布。水熊虫是对缓步动物门生物的俗称,有人给他们起了个外号叫“小美”,迄今为止在地球上共有900多种,而且大都在地球上有着广泛的分布。水熊的体积非常小,最小的水熊体型只有50毫米,最大的水熊也只有1.4毫米,人们只有在显微镜的帮助…

高中生看过来!771个本科专业目录大全(附就业去向)

天为大家整理了12大学科门类的771个专业汇总及就业去向,为家长和孩子们专业选择提供参考。 教育部发布的《普通高等学校本科专业目录》,将普通高等教育分为哲学、经济学、法学、教育学、文学、历史学、理学、工学、农学、医学、管理学、艺术学12个学科门类。 根据专业的设置时…

原创战火铭记:一江山岛的历史回响

文/杨晓光 在东海之滨的台州列岛中,有一座小岛,名为一江山岛。尽管它的面积仅有1.7平方公里,但却因1955年那场陆海空协同登陆作战而声名远扬。一江山岛由南北两岛构成,由于岛屿的形态狭长,中间隔着一条宽约150米至200米的海峡,宛若一条天然的江流从两岛之间穿过,故得此名…

成本1500万,首映夺冠,我断言:包贝尔《制暴》是警匪片天花板

6月6号10点《制暴》网络首映。 这片由《东北警察故事》《目中无人》两大金牌系列的制作团队打造,谢苗还客串了一把李红旗,算是一个电影宇宙的作品,但电影又请来了包贝尔这位烂片之王主演。 让不少影迷担心质量问题,没想到我看完整部电影,不由感慨包贝尔找对路线了。 我甚至…

原创火影博人传:佐助发现第二只十尾,大筒木一族有六人

日本动漫《博人传》漫画第44话中,阿玛多离开强大的壳组织,为了保全自己,免遭追杀,阿玛多去了木叶村寻求保护,阿玛多打算把壳组织的全部秘密告诉漩涡鸣人,阿玛多提到的有“壳组织”、“慈弦”、“十尾”、“大筒木一族”这些信息,其中“壳组织”和“慈弦”在之前的文章介…

阿里云万网焕新,域名服务进入AI时刻

立秋已过,北京的天气逐渐转凉,阿里云又在搞大事。在阿里巴巴总部新办公楼里,召开了一场具有特殊意义的活动,阿里云万网宣布其域名产品服务全面焕新,正式完成AI化系列改造。曾经想象过AI会向各个行业渗透,但描绘不出具体的样子。阿里云万网焕新?按照字面意思理解,这好像…

​桃花眼、凤眼、狐狸眼,垂眼……来看看你是哪一种眼型?

一般眼型有这几种, 桃花眼、凤眼(丹凤眼、瑞凤眼、睡凤眼)、 狐狸眼、垂眼、 柳叶眼、杏眼、铜铃眼等。 那么你是哪一种眼型呢? 今天教你辨别!我们把常见的眼型,按线条形状的直曲划分,分别如下:直线形:丹凤眼、柳叶眼、狐狸眼、垂眼;曲线形:桃花眼、杏眼、铜铃眼、…

一分钟掌握光猫管理员密码获取方法

: 今天,我们将以华为HG2201T光猫为例,为您揭示隐藏在其背后的秘密。要获取光猫管理员密码,您需要关注以下几个步骤。 第一步,找到光猫背面的useradmin密码。这是进入超级管理员权限的关键。 第二步,打开您的浏览器,输入光猫的默认IP地址,即我们熟悉的192.168.1.1。然后,…

京东2024年校园招聘将开启,你准备好了吗?

随着2024年即将到来,各大企业纷纷发布校园招聘信息,京东也不例外。作为国内知名的电商平台,京东的校园招聘每年都吸引了大量应届毕业生的关注。那么,今年的京东校园招聘有哪些亮点?如何做好准备,以便在竞争中脱颖而出呢? 首先,京东在2024年的校园招聘计划中,提供了丰富…

原创墨西哥伦理片《你妈妈也一样》解读:青春的迷乱与成长

《你妈妈也一样》是一部揭示青春、欲望与成长的墨西哥电影,由阿方索卡隆执导,盖尔加西亚贝纳尔、玛丽亚亚拉、迭戈鲁纳等主演。这部电影通过讲述两个少年与一个美丽少妇的旅程,展现了青春期的躁动、对成人世界的迷惑以及对亲密关系的渴望。以下是对这部电影的深度解说。电影…

为什么会有这么多军工企业、科研院所入成都?

成都是我国的一个军工城市吗?答案是肯定的,熟悉我国军工制造业发展历史的朋友都知道,我国的军工制造业重心经历过一个从东北、华东沿海到西南西北内陆转移的过程。在这个过程中,我国西南地区的超大城市、国家中心城市成都受益很大,现在的成都市我国的一个军工制造、科研的…