shell脚本第七章文本三剑客之awk

ANSYS Fluent热边界条件避坑指南:为什么你的自然对流计算结果总出错? 本文深入剖析了在ANSYS Fluent中进行自然对流仿真时,导致计算结果出错或发散的核心原因与解决方案。重点解析了重力项与操作密度设置、Boussinesq与不可压缩理想气体模型的抉择、以及压力离散格式(推荐Body Force Weighted)这三大关键雷区,并结合电子机箱散热等实战案例,提供了一套稳定可靠的仿真设置流程与调试技巧。 阅读详情

目录

一、关于awk的基础知识

1、什么是awk

2、工作原理

二、结合简单示例,对awk进一步理解

1、打印文本内容

1.1 打印磁盘已经使用情况

1.2  打印字符串

  1.3  打印字符串确定文件有多少行

2、根据$n以及NR提取字段

2.1 提取ip地址

3、根据选项-F指定分隔符

3.1 打印/etc/passwd所有用户名

3.2  打印多列内容

​编辑 3.3  打印磁盘已经使用情况,去除%

 3.4  取出文本中的ip地址及时间 

​编辑 3.5  取出文本中的主机并放回

4.、根据关键字提取所在行

4.1 提取/etc/passwd 以root开头的行

 4.2  提取/etc/passwd root所在的行 

 4.3  提取/etc/passwd nologin结尾的行 

5、使用BEGIN输出包含指定字符的行并统计有多行

  6、FS:指定每行文本的字段分隔符,默认为空格或制表符,与-F相同

7、NF:当前处理行的整行内容 

7.1 当前处理的行的字段个数

 7.2  打印出每行最后一个字段 

​编辑 7.3  打印出每行倒数第二个字段

8、NR:当前处理行的行号 

8.1 当前处理的行的行号

 8.2  NR==n代表行号等于什么

 8.3  NR%2==0取偶数行

​编辑

 8.4  NR%2==1取奇数行 

8.5  NR==1,NR==4取区间行 

8.6  取UID数值范围$n>1000 


一、关于awk的基础知识

1、什么是awk

awk:Aho, Weinberger, Kernighan,报告生成器,格式化文本输出,GNU/Linux发布的AWK目前由自由软件基金会(FSF)进行开发和维护,通常也称它为 GNU AWK

有多种版本:

  • AWK:原先来源于 AT & T 实验室的的AWK

  • NAWK:New awk,AT & T 实验室的AWK的升级版

  • GAWK:即GNU AWK。所有的GNU/Linux发布版都自带GAWK,它与AWK和NAWK完全兼容

GNU AWK 用户手册文档 

The GNU Awk User’s Guide

 在 Linux/UNIX 系统中,awk 是一个功能强大的编辑工具,逐行读取输入文本,默认以空格或tab键作为分隔符作为分隔,并按模式或者条件执行编辑命令。而awk比较倾向于将一行分成多个字段然后进行处理。AWK信息的读入也是逐行指定的匹配模式进行查找,对符合条件的内容进行格式化输出或者过滤处理,可以在无交互的情况下实现相当复杂的文本操作,被广泛应用于 Shell 脚本,完成各种自动化配置任务。

2、工作原理

前面提到 sed 命令常用于一整行的处理,而 awk 比较倾向于将一行分成多个“字段”然后再进行处理,且默认情况下字段的分隔符为空格或 tab 键。awk 执行结果可以通过 print 的功能将字段数据打印显示。

格式: 

 awk [options]  'program' var=value  file…

说明:

program通常是被放在单引号中,并可以由三种部分组成

  • BEGIN语句块

  • 模式匹配的通用语句块

  • END语句块

常见选项:

  • -F “分隔符” 指明输入时用到的字段分隔符,默认的分隔符是若干个连续空白符

  • -v var=value 变量赋值

Program格式:

pattern{action statements;..}  

  • pattern:决定动作语句何时触发及触发事件,比如:BEGIN,END,正则表达式等
  • action statements:对数据进行处理,放在{}内指明,常见:print, printf
  • output statements:print,printf
  • Expressions:算术,比较表达式等
  • Compound statements:组合语句
  • Control statements:if, while等
  • input statements

执行过程:

  •  第一步:执行BEGIN{action;… }语句块中的语句
  • 第二步:从文件或标准输入(stdin)读取一行,然后执行pattern{ action;… }语句块,它逐行扫描文件,从第一行到最后一行重复这个过程,直到文件全部被读取完毕。
  • 第三步:当读至输入流末尾时,执行END{action;…}语句块
  1. BEGIN语句块在awk开始从输入流中读取行之前被执行,这是一个可选的语句块,比如变量初始化、打印输出表格的表头等语句通常可以写在BEGIN语句块中
  2. END语句块在awk从输入流中读取完所有的行之后即被执行,比如打印所有行的分析结果这类信息汇总都是在END语句块中完成,它也是一个可选语句块
  3. pattern语句块中的通用命令是最重要的部分,也是可选的。如果没有提供pattern语句块,则默认执行{ print },即打印每一个读取到的行,awk读取的每一行都会执行该语句块

3、常见的内建变量(可直接用) 

  • FS∶ 列分割符。指定每行文本的字段分隔符,默认为空格或制表位。与"-F"作用相同
  • NF∶ 当前处理的行的字段个数。
  • NR∶ 当前处理的行的行号(序数)。
  • $0∶当前处理的行的整行内容。
  • $n∶ 当前处理行的第n个字段(第n列)。
  • FILENAME∶ 被处理的文件名。
  • RS∶ 行分隔符。awk从文件上读取资料时,将根据RS的定义把资料切割成许多条记录,而awk一次仅读入一条记录,以进行处理。预设值是’\n’
  • $NF:最后一段
  • $(NF-1):倒数第二段

二、结合简单示例,对awk进一步理解

1、打印文本内容

  • awk可以将自动将多个空格压缩成一个空格

  • 打印字符串需要加双引号

1.1 打印磁盘已经使用情况
df |awk '{print $5}'

1.2  打印字符串
awk '{print "hello"}'

  1.3  打印字符串确定文件有多少行
awk '{print "hello"}' /etc/fstab 
 
awk '{print "hello"}' /etc/fstab |wc -l
 
cat /etc/fstab |wc -l

2、根据$n以及NR提取字段

2.1 提取ip地址

3、根据选项-F指定分隔符

3.1 打印/etc/passwd所有用户名
cat /etc/passwd|awk -F":" '{print $1}'
或
cat /etc/passwd|awk -F: '{print $1}'

3.2  打印多列内容

打印时逗号可以表示空格,如果使用“:”或者“+”,需要将特殊符号加上双引号当成字符串打印

cat /etc/passwd|awk -F: '{print $1,$3}'
#指定冒号作为分隔符,打印第一列和第三列
cat /etc/passwd|awk -F: '{print $1":"$3}'
#用冒号分隔开
cat /etc/passwd|awk -F: '{print $1"\t"$3}'

 3.3  打印磁盘已经使用情况,去除%
#使用两条awk命令
df|awk '{print $5}'|awk -F% '{print $1}'
 
#使用一次awk命令
df|awk -F"[ %]+" '{print $5}'
 
##也可以使用( |%)代表或者
df|awk -F"( |%)+" '{print $5}'

 3.4  取出文本中的ip地址及时间 
##文本内容##
vim test.txt 
 
58.87.87.99 - - [09/Jun/2020:03:42:43 +0800] "POST /wp-cron.php?
doing_wp_cron=1591645363.2316548824310302734375 HTTP/1.1" ""sendfileon
128.14.209.154 - - [09/Jun/2020:03:42:43 +0800] "GET / HTTP/1.1" ""sendfileon
64.90.40.100 - - [09/Jun/2020:03:43:11 +0800] "GET /wp-login.php HTTP/1.1" ""sendfileo
 
 
##提取##
cat test.txt |sed '2d'|awk -F"[[ ]"  '{print $5"\t"$1}'
 3.5  取出文本中的主机并放回
##文本内容##
vim host.txt 
 
1 www.kgc.com
2 mail.kgc.com
3 ftp.kgc.com
4 linux.kgc.com
5 blog.kgc.com
 
##提取##
cat host.txt |awk -F "[. ]" '{print $2}' >>host.txt

4.、根据关键字提取所在行

4.1 提取/etc/passwd 以root开头的行
cat /etc/passwd |awk -F":" '/^root/{print}' 

 4.2  提取/etc/passwd root所在的行 
cat /etc/passwd |awk -F: '/root/{print}'

 4.3  提取/etc/passwd nologin结尾的行 
cat /etc/passwd |awk -F":" '/nologin$/{print}' 
 
##如果提取/sbin/nologin,则需要\转义/
cat /etc/passwd |awk -F":" '/\/sbin\/nologin$/{print}' 

 

5、使用BEGIN输出包含指定字符的行并统计有多行

  • BEGIN模式表示,在处理指定的文本之前,需要先执行BEGIN模式中指定的动作;

  • awk再处理指定的文本,之后再执行END模式中指定的动作;

  • END{ } 语句块中,往往会放入打印结果等语句。

#先定义变量x,表示执行多少次
awk 'BEGIN {x=0};/\/bin\/bash$/;{x++};END{print x}' /etc/passwd

  6、FS:指定每行文本的字段分隔符,默认为空格或制表符,与-F相同

awk -v FS=: '{print $1FS$3}' /etc/passwd

7、NF:当前处理行的整行内容 

7.1 当前处理的行的字段个数
cat /etc/passwd |awk -F: '{print NF}'

 7.2  打印出每行最后一个字段 
cat /etc/passwd |awk -F: '{print $NF}'
 7.3  打印出每行倒数第二个字段
cat /etc/passwd |awk -F: '{print $(NF-1)}'

8、NR:当前处理行的行号 

8.1 当前处理的行的行号
#NR写在后面则在后面显示行号
#awk  -F: '{print $1,NR}' /etc/passwd
root 1
bin 2
daemon 3
adm 4
lp 5
sync 6
shutdown 7
halt 8
 
#可以用制表符
awk  -F: '{print $1"\t"NR}' /etc/passwd
root	1
bin  	2
daemon	3
adm  	4
lp	    5
 
#NR写在前面则在前面显示行号
awk  -F: '{print NR"\t"$1}' /etc/passwd
1	root
2	bin
3	daemon
4	adm
5	lp
 8.2  NR==n代表行号等于什么
awk -F: 'NR==2 {print $1}' /etc/passwd

 8.3  NR%2==0取偶数行
awk -F: 'NR%2==0 {print NR"\t"$1}' /etc/passwd
 8.4  NR%2==1取奇数行 
awk -F: 'NR%2==1 {print $1}' /etc/passwd

8.5  NR==1,NR==4取区间行 
awk -F: 'NR==1,NR==4 {print $1}' /etc/passwd

8.6  取UID数值范围$n>1000 
#取uid大于1000的行
awk -F: '$3>1000 {print}' /etc/passwd
 
 
#取uid大于等于1000的行
awk -F: '$3>=1000 {print}' /etc/passwd

LVDS系列23:Xilinx Ultrascale系ISERDESE3原语(一) 当FIFO_RD_CLK与CLKDIV对齐时,也就是Latency With Late FIFO Empty情况时,延迟比前一种情况长一个FIFO_RD_CLK时钟周期,也就是在FIFO_RD_CLK上升沿后一点,CLKDIV才成功驱动完FIFO_EMPTY的变化,于是读侧要得到FIFO_EMPTY为0的情况则要等到下一个FIFO_RD_CLK的上升沿采集时;IS_CLK_INVERTED、IS_CLK_B_INVERTED设置CLK和CLK_B是否反转,一般情况下设置0; 阅读详情

相关推荐

AWK 脚本文件操作细节解析

摘要:本文探讨了AWK脚本文件操作的特殊性,指出与Shell脚本中>操作符的不同行为。AWK默认会持续追加内容到文件,而非覆盖。通过实际案例说明了如何通过关闭文件或优化写入时机来确保正确覆盖文件内容。文章还给出了温度传感器数据采集的应用实例,强调理解AWK文件操作机制对编写高效脚本的重要性,并提供了减少I/O操作的优化方法(150字)。

m0_74337424的博客 87

Shell脚本三剑客AWK

Linux/UNIX 系统中,awk 是一个功能强大的编辑工具,逐行读取输入文本,默认以空格或tab键作为分隔符作为分隔,并按模式或者条件执行编辑命令。而awk比较倾向于将一行分成多个字段然后进行处理。AWK信息的读入也是逐行指定的匹配模式进行查找,对符合条件的内容进行格式化输出或者过滤处理,可以在无交互的情况下实现相当复杂的文本操作,被广泛应用于 Shell 脚本,完成各种自动化配置任务。...

LBP20001204的博客 1054

secoclient-linux-64-7.0.12.1.run

secoclient-linux-64-7.0.12.1.run linux版,亲测在Ubuntu 18.04上好用

Shell脚本AWK

一.AWK的介绍 1.1AWK的概述 AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。 它是专门为文本处理设计的编程语言,也是行处理软件,通常用于扫描、过滤、统计汇总工作 数据可以来自标准输入也可以是管道或文件 20世纪70年代诞生于贝尔实验室,现在centos7用的是gawk 1.2AWK的工作原理 1.当读到第一行时,匹配条件,然后执行指定动作,再接着读取第二行数据处理,不会默认输出 2.如果没有定义匹配条件默认是匹配所有数据行,awk隐含循环,条件匹配多少次动作就会执...

weixin_67474417的博客 7537

shell脚本awk命令

1. awk的用法 语法格式:awk [选项] ‘指令’ 操作文件 常用选项: -F: 指定分隔符,分隔符用""引起来 -v:var=value在awk程序开始之前指定一个值valu给变量var,这些变量值用于awk程序的BEGIN快 -f:后面跟一个保存了awk程序的文件,代替在命令行指定awk程序 2、实例1:在命令行直接输入awk指令 2.1、准备一个1.txt文件,内容如下 2.2、逐行读取文件1.txt内容并打印 命令:awk '{print}'1.txt...

花&败 5887

Shell脚本三剑客Awk

一、AWK工具介绍 AWK是一种处理文本文件的语言,是一个强大的文本分析工具。 它是专门为文本处理设计的编程语言,也是行处理软件,通常用于扫描、过滤、统计汇总工作。 数据可以来自标准输入也可以是管道或文件。 1.1.AWK工作原理 逐行读取文本,默认以空格或tab键为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令。 sed命令常用于一整行的处理,而awk比较倾向于将一行分成多个""字段然后再进行处理。awk信息的读入也是逐行读取的,执行结果可以通过print的功能

m0_59579177的博客 1520

Shell三剑客(grep、sed、awk

Shell三剑客(grep、sed、awk)一、grep二、sed流编辑器(1)sed简介:(2)工作流程:- 常见选项- 常见操作- sed替换标记- sed元字符集sed用法示例(1)输出符合条件的文本(2)删除符合条件的文本 ’d'(3)替换符合条件的文本(4)迁移符合条件的文本(5)使用脚本编辑文件三、awk工具(1)awk工作流程(2)awk常见用法(3)特殊的内建变量用法示例:(1)按行输出文本(2)按字段输出文本(3)通过管道符、双引号调用shell命令 一、grep grep的一些正则表达式

礁之的博客 9369

Shell 脚本系列 | shell三剑客

"Shell三剑客"是指在Linux/Unix系统下使用最广泛的三个命令行工具:grep、sed和awk。它们都是文本处理工具,可以用于快速搜索、替换和处理大量文本数据。命令特点使用场景grep擅长查找过滤快速查找过滤sed擅长取行和替换需要快速进行替换/修改文件内容awk擅长取列、统计计算文件取列、数据切片、对比/比较和统计shell三剑客通常要与正则表达式一起使用.:匹配任意单个字符(除了换行符)。*:匹配前面的字符0次或多次。^:匹配行的开头。$:匹配行的结尾。

weixin_48711696的博客 2505

shell编程之文本三剑客grep、sed、awk

Shell编程中的文本三剑客(grep、sed、awk)是Linux/Unix环境下最强大的文本处理工具组合,各自擅长不同的文本处理场景grep‌功能:文本过滤工具,主要用于搜索匹配特定模式的行应用场景:日志过滤、配置文件检查sed‌功能:流编辑器,擅长行级文本编辑工作流程:读取→执行→显示循环处理每行文本awk‌功能:文本分析工具,擅长列处理和格式化输出应用场景:数据统计、报表生成三者的典型配合:先用grep筛选目标行,再用sed进行编辑处理,最后用awk格式化输出和分析核心功能。

jeffry__jiang的博客 1897

Shell脚本文本处理三剑客——awk

awk是一种处理文本文件的语言,是一个强大的文本分析工具②可以在无交互的模式下实现复杂的文本操作③相较于sed常作用于一整个行的处理,awk则比较倾向于一行当中分成数个字段来处理,因为awk相当适合小型的文本数据。④之所以叫awk是因为创始人的名字首字母。

rmh0713的博客 1962

shell三剑客

sed可以交换保持空间和模式空间的数据(一般都是将保持空间的数据,拿到模式空间进行操作),但是不能在保持空间上执行普通的sed命令,也就是说我们可以在保持空间存储数据。① RS既record separator输入输出数据记录分隔符,每一行是怎么没的,表示每个记录输入的时候的分隔符,既行与行之间如何分隔,默认为\n,可以调整为其他字符。注意:不建议使用 /,建议使用 #,因为,/ 容易 混淆,比如说,我的内容中就有 /,如果要替换了,那是不是要加,转移字符\/

2301_77031835的博客 1172

shell 三剑客(grep,sed,awk)学习

shell语法中,grep:擅长查找和匹配文本;awk:擅长编辑和匹配文本内容;sed:删除格式化文本内容,对文本进行复杂处理

小青头的博客 985

shell文本三剑客 awk 和 grep

grep主要用于过滤文本,sed用于修改文本,而awk则擅长处理和格式化文本

2401_83330816的博客 999

shell脚本-grep、sed、awk三剑客

Shell 脚本中的 grep、sed 和 awk 被称为 “三剑客”,它们是文本处理中的利器。grep用于快速搜索文本,sed则是对文本进行编辑和转换,而awk则提供了更强大的文本处理能力,可以按字段分割、执行条件操作等。这三者结合起来,能够处理各种文本处理任务,如日志分析、数据提取、格式转换等。

XMYX-0 1936

shell脚本三剑客AWK

文章目录一、AWK工具介绍1.1 AWK 命令的格式1.2 AWK 工作原理1.3 常见的内建变量二、AWK 命令的使用1.打印文本内容 一、AWK工具介绍 AWK是一种处理文本文件的语言,是一个强大的文本分析工具。 它是专门为文本处理设计的编程语言,也适行处理软件,通常用于扫描、过滤、统计汇总工作 数据可以来自标准输入也可以是管道或文件 AWK 是一种处理文本文件的语言,是一个强大的文本分析工具 可以在无交互的模式下实现复杂的文本操作 相较于 sed 常作用于一整个行的处理,awk ..

weixin_63634809的博客 2029

awk脚本用法

awk脚本用法---传参----同时处理多个文件---awk使用数组

qq_33172851的博客 1766

Shell脚本awk

目录:一、概述二、awk基本语法格式三、awk基本操作四、awk条件及循环语句五、awk函数六、awk演示示例(源自于man手册)一、概述。

云端梦留白的博客 730

Shell脚本awk

awk:Aho, Weinberger, Kernighan,报告生成器,格式化文本输出,GNU/Linux发布的AWK目前由自由软件基金会(FSF)进行开发和维护,通常也称它为 GNU AWK

Kiryu7的博客 1467

shell脚本文本三剑客awk

多分支为if(判断条件){执行语句}else if (判断条件){执行语句}else{执行语句}逻辑操作符:&&与 并且的关系,||或 或者关系,!双分支为if(判断条件){执行语句} else{执行语句}if语句:awk的if语句也分为单分支、双分支和多分支。比较操作符:==,!=, >, >=,

weixin_53585291的博客 651

脚本语言】Shell Script - 终端打印指令

终端是交互式工具,在终端中打印文本是绝大多数脚本中的基本任务。 本文共计1559字,预计阅读时间6分钟

Tsang的博客 3031

shellawk命令

Expression | getline [ Variable ]从来自 Expression 参数指定的命令的输出中通过管道传送的流中读取一个输入记录,并将该记录的值指定给 Variable 参数指定的变量。sub( Ere, Repl, [ In ] )用 Repl 参数指定的字符串替换 In 参数指定的字符串中的由 Ere 参数指定的扩展正则表达式的第一个具体值。出现在 Repl 参数指定的字符串中的 &(和符号)由 In 参数指定的与 Ere 参数的指定的扩展正则表达式匹配的字符串替换。

qq_36864672的博客 1024
上一篇: shell脚本第六章文本三剑客之sed
下一篇: linux系统---防火墙
渐觉
博客等级 码龄3年 1336粉丝 102原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值