百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

Shell awk 命令基本用法

liuian 2024-12-14 13:33 108 浏览

awk 是一种处理文本文件的语言,是一个强大的文本分析工具。

awk‘条件1{动作1} 条件2{动作2}…’ 文件名
条件(Pattern):
    一般使用关系表达式作为条件。这些关系表达式非常多,例如:
    x > 10  判断变量x是否大于10
    x == y  判断变量x是否等于变量y
    A ~ B   判断字符串A中是否包含能匹配B表达式的子字符串
    A !~ B  判断字符串A中是否不包含能匹配B表达式的子字符串

动作(Action) :
    格式化输出
    流程控制语句

常用参数:

   -F   指定输入时用到的字段分隔符
   -v   自定义变量
   -f   从脚本中读取awk命令
   -m   对val值设置内在限制

printf 格式化输出

printf ‘输出类型输出格式’ 输出内容

输出类型:
%c:     ASCII字符.显示相对应参数的第一个字符
%-ns:   输出字符串,减号“-”表示左对齐(默认右对齐),n是数字指代输出几个字符,几个参数就写几个%-ns
%-ni:   输出整数,n是数字指代输出几个数字
%f:    输出小数点右边的位数
%m.nf:  输出浮点数,m和n是数字,指代输出的整数位数和小数位数。如%8.2f代表共输出8位数,其中2位是小数,6位是整数。

输出格式:
\a: 输出警告声音
\b: 输出退格键,也就是Backspace键
\f: 清除屏幕
\n: 换行
\r: 回车,也就是Enter键
\t: 水平输出退格键,也就是Tab 键
\v: 垂直输出退格键,也就是Tab 键

为了演示printf命令,我们需要修改下刚刚cut命令使用的student.txt文件,文件内容如下:

[root@localhost ~]$ vi student.txt
ID      Name    php      Linux      MySQL     Average
1       AAA      66         66       66           66
2       BBB      77         77       77           77
3       CCC      88         88       88           88

#printf格式输出文件
[root@localhost ~]$ printf '%s\t %s\t %s\t %s\t %s\t %s\t \n’ $(cat student.txt)
#%s分别对应后面的参数,6列就写6个
ID      Name    php   Linux  MySQL   Average
1       AAA      66         66       66           66
2       BBB      77         77       77           77
3       CCC      88         88       88           88

如果不想把成绩当成字符串输出,而是按照整型和浮点型输出,则要这样:

[root@localhost ~]$ printf '%i\t %s\t %i\t %i\t %i\t %8.2f\t \n’ \ $(cat student.txt | grep -v Name)

我们这里先来学习awk基本用法,也就是只看看格式化输出动作是干什么的。

[root@localhost ~]$ awk '{printf $2 "\t" $6 "\n"}’ student.txt
#输出第二列和第六列

比如刚刚截取df命令的结果时,cut命令已经力不从心了,我们来看看awk命令:

[root@localhost ~]$ df -h | awk '{print $1 "\t" $3}'
#截取df命令的第一列和第三列

awk 的条件

条件的类型

条件

说明

awk保留字

BEGIN

在awk程序一开始时,尚未读取任何数据之前执行。BEGIN后的动作只在程序开始时执行一次

awk保留字

END

在awk程序处理完所有数据,即将结束时执行。END后的动作只在程序结束时执行一次

关系运算符

>

大于

关系运算符

<

小于

关系运算符

>=

大于等于

关系运算符

<=

小于等于

关系运算符

==

等于。用于判断两个值是否相等,如果是给变量赋值,请使用“”号

关系运算符

!=

不等于

关系运算符

A~B

判断字符串A中是否包含能匹配B表达式的子字符串

关系运算符

A!~B

判断字符串A中是否不包含能匹配B表达式的子字符串

正则表达式

/正则/

如果在"//"中可以写入字符,也可以支持正则表达式

BEGIN

BEGIN是awk的保留字,是一种特殊的条件类型。BEGIN的执行时机是“在 awk程序一开始时,尚未读取任何数据之前执行”。一旦BEGIN后的动作执行一次,当awk开始从文件中读入数据,BEGIN的条件就不再成立,所以BEGIN定义的动作只能被执行一次。
例如:

[root@localhost ~]$ awk 'BEGIN{printf "This is a transcript \n" } {printf $2 "\t" $6 "\n"}’ student.txt
#awk命令只要检测不到完整的单引号不会执行,所以这个命令的换行不用加入“|”,就是一行命令
#这里定义了两个动作
#第一个动作使用BEGIN条件,所以会在读入文件数据前打印“这是一张成绩单”(只会执行一次)
#第二个动作会打印文件的第二字段和第六字段

END

END也是awk保留字,不过刚好和BEGIN相反。END是在awk程序处理完所有数据,即将结束时执行。END后的动作只在程序结束时执行一次。例如:

[root@localhost ~]$ awk 'END{printf "The End \n"} {printf $2 "\t" $6 "\n"}’ student.txt
#在输出结尾输入“The End”,这并不是文档本身的内容,而且只会执行一次

关系运算符

举几个例子看看关系运算符。假设我想看看平均成绩大于等于87分的学员是谁,就可以这样输入命令:
例子1:

[root@localhost ~]$ cat student.txt | grep -v Name | awk '$6 >= 87 {printf $2 "\n"}'
#使用cat输出文件内容,用grep取反包含“Name”的行
#判断第六字段(平均成绩)大于等于87分的行,如果判断式成立,则打第六列(学员名$2)

加入了条件之后,只有条件成立动作才会执行,如果条件不满足,则动作则不运行。通过这个实验,大家可以发现,虽然awk是列提取命令,但是也要按行来读入的。这个命令的执行过程是这样的:

1)如果有BEGIN条件,则先执行BEGIN定义的动作。
2)如果没有BEGIN条件,则读入第一行,把第一行的数据依次赋予$0、$1、$2等变量。其中$0代表此行的整体数据,$1代表第一字段,$2代表第二字段。
3)依据条件类型判断动作是否执行。如果条件符合,则执行动作,否则读入下一行数据。如果没有条件,则每行都执行动作。
4)读入下一行数据,重复执行以上步骤。

再举个例子,如果我想看看Sc用户的平均成绩呢:

例子2:

[root@localhost ~]$ awk '$2 ~ /AAA/ {printf $6 "\n"}' student.txt
#如果第二字段中输入包含有“Sc”字符,则打印第六字段数据
85.66

这里要注意在awk中,使用“//”包含的字符串,awk命令才会查找。也就是说字符串必须用“//”包含,awk命令才能正确识别。

正则表达式

如果要想让awk 识别字符串,必须使用“//”包含,例如:
例子1:

[root@localhost ~]$ awk '/Liming/ {print}’student.txt
#打印Liming的成绩

当使用df命令查看分区使用情况是,如果我只想查看真正的系统分区的使用状况,而不想查看光盘和临时分区的使用状况,则可以:

例子2:

[root@localhost ~]$ df -h | awk '/sda[O-9]/ {printf $1 "\t" $5 "\n"}’
#查询包含有sda数字的行,并打印第一字段和第五字段

相关推荐

w7主题设置(w7怎么换主题)

1、打开win7系统电脑左下角“开始”菜单,找到【控制面板】点击打开;2、进入控制面板界面,右上方【查看方式】更改为“小图标”,然后找到【管理工具】打开;3、进入“管理工具”,点击打开【服务】选项;4...

显卡温度多少正常范围(显卡温度一般在什么范围合理)
显卡温度多少正常范围(显卡温度一般在什么范围合理)

1、正常情况下显卡的温度是在30至85这个区间。2、如果是天气热一点的话,保持在50至85也是属于正常的。3、如果电脑在玩着大型游戏,显卡温度达到90以上都是有可能的。4、但如果你的显卡温度超过95度的话,就要注意一下了,这个时候可以保持室...

2026-01-03 01:55 liuian

惠普1008打印机驱动安装教程

首先,你可以从惠普官网下载最新的驱动程序并解压缩。接下来,双击解压后的驱动文件并跟随提示完成安装。如果你遇到任何问题,可以尝试用管理员权限运行安装程序或尝试重新启动电脑后再次安装驱动。最后,检查设备管...

惠普打印机官方售后维修服务中心

郑州市金水区文化路82硅谷广场B座1303室营业时间:周一至周日9:00-18:00支持品牌:惠普支持产品:笔记本电脑,台式机,显示器维修项目:不开机,死机重启,清理除尘,数据恢复等郑州市黄河南街与同...

全部游戏大全免费安装(全部游戏免费软件)
  • 全部游戏大全免费安装(全部游戏免费软件)
  • 全部游戏大全免费安装(全部游戏免费软件)
  • 全部游戏大全免费安装(全部游戏免费软件)
  • 全部游戏大全免费安装(全部游戏免费软件)
电脑怎么安装win10装系统(电脑怎么安装win10装系统按哪个键)

Windows10系统安装教程如下:准备好所需的文件和文件夹,包括安装介质(例如安装光盘、USB闪存驱动器或网络安装介质),以及需要包含Windows10镜像文件的文件和文件夹...

国内哪个ai写代码最强(ai用什么代码编程)

是的,coloros小布ai可以写代码。它具有图灵完备的编程能力,并且可以通过编程语言进行逻辑推理和计算,实现各种功能。通过编程,可以让coloros小布ai执行特定的任务、完成复杂的计算和处理数据,...

快捷键大全截图(快捷键大全图片截图)
  • 快捷键大全截图(快捷键大全图片截图)
  • 快捷键大全截图(快捷键大全图片截图)
  • 快捷键大全截图(快捷键大全图片截图)
  • 快捷键大全截图(快捷键大全图片截图)
正版win7下载官网(正版win7旗舰版下载官网)

去gsdn官网选择相应的版本1.打开您的浏览器,访问官方下载页面:https://www.minecraft.net/zh-hans/2.点击“获取”按钮,在弹出的对话框中选择“对PC/Mac购买...

office2010软件(office2010软件下载)
office2010软件(office2010软件下载)

看你怎么激活了,正规渠道正版激活这个是最便宜的微软原装正版办公软件office2010中文学生家庭版1用户简包/COEM¥790.00这个是最贵的微软Office2010专业版中文版特含Publisher,Access两大组...

2026-01-02 21:55 liuian

电脑下边任务栏跑到左边怎么办

电脑桌面的菜单栏从底部跑到左边,想要复原的方法如下:1、鼠标右击“任务栏”空白处,在打开的菜单中点击“属性”2、在弹窗中,找到“屏幕上的任务位置”,在它的右侧点一下倒三角。3、点一下“确定”,接下来就...

win10关闭防火墙通知(win10关闭防火墙通知怎么关闭)

可以关闭防火墙win10提醒。因为win10自带的防火墙会有提醒功能,但有些用户会觉得这个提醒不必要,可以关闭。具体操作步骤是:右键点击Windows徽标,选择“Windows防火墙”,点击“高级设置...

微软公司介绍(微软公司介绍文案)

微软美国跨国科技公司微软(Microsoft)是一家美国跨国科技企业,1975年4月4日创立。2023财年营收2119.15亿美元,[200]公司总部设立在华盛顿州雷德蒙德(Redmond,邻近西雅图...

怎样设置电脑桌面密码(设置电脑桌面密码步骤)

首先,需要确定你是想设置电脑屏幕保护密码还是系统登录密码。如果是屏幕保护密码,可以在电脑设置中进行修改。打开控制面板,找到“个性化”或“外观和个性化”选项,再找到“屏幕保护器”选项,点击“设置”,在弹...

繁体字输入法下载(繁体字输入法下载安装)

你下载百度手机输入法,默认的就是双拼,可以自己选择26键拼音输入01打开苹果手机,找到苹果商城,02打开下载中心,搜索“搜狗输入法”,03下载搜狗输入法,04等下载完成后桌面上会显示搜狗输入法,05然...