【一天一个shell命令】文本内容操作系列-awk补充一

简介:

之前我们学习了awk基本入门,我惊喜的发现有awk一篇详细文章,有写念头,不能全部转载,转化成自己的方式来写一些。

主讲内置变量和部分字符串函数 

内置变量(有翻译特殊变量和环境变量,按照官方翻译为内置变量) 

变量

说明

$n 当前记录的第n个字段,字段间由FS分隔。
$0 完整的输入记录。
ARGC 命令行参数的数目。
ARGIND 命令行中当前文件的位置(从0开始算)。
ARGV 包含命令行参数的数组。
BINMODE 在非POSIX系统上,这个变量指定的所有I / O使用二进制模式
CONVFMT 数字转换格式(默认值为%.6g)
ENVIRON 环境变量关联数组。
ERRNO 最后一个系统错误的描述。
FIELDWIDTHS 字段宽度列表(用空格键分隔)。
FILENAME 当前文件名。
FNR 同NR,但相对于当前文件
FPAT

这是一个正则表达式(字符串),告诉gawk基于匹配正则表达式的文本来创建字段

FS 字段分隔符(默认是任何空格)。
IGNORECASE 如果为真,则进行忽略大小写的匹配。
LINT

当这个变量为真(非零或非空),gawk的行为犹如"--lint"命令行选项

NF 当前记录中的字段数。
NR 当前记录数。
OFMT 数字的输出格式(默认值是%.6g)。
OFS 输出字段分隔符(默认值是一个空格)。
ORS 输出记录分隔符(默认值是一个换行符)。
PROCINFO

这个数组的元素提供访问运行awk程序的信息

RLENGTH 由match函数所匹配的字符串的长度。
RS 记录分隔符(默认是一个换行符)。
RT 每次一条记录被读取的设置
RSTART 由match函数所匹配的字符串的第一个位置。

 

SUBSEP

数组下标分隔符(默认值是\034)。

TEXTDOMAIN 此变量用于程序的国际化

蓝色为新增加的内置变量。 

 

简单举例:

1.

 
 
  1. sed 1q /etc/passwd | awk '{ FS = ":"; print $1 }' 

打印密码第一行,用冒号分隔符

2.

 
 
  1. awk 'END{print FILENAME}' awk.txt 

打印文本FILENAME

3.

 
 
  1. seq 100 | awk 'NR==4,NR==6' 

打印4到6行 


 再介绍几个awk内置的字符串函数,也讲一部分。

length(string):
 返回字符串的长度

index(string,serch_string):
返回search_string在字符串中出现的位置

split(string,array,delimiter):
用定界符生成一个字符串列表,并将该列表存入数组

substr(string,array,delimiter):
 在字符串中用字符起止便宜量生成子串,并返回该子串

sub(regex,replacement_str,string):
将正则表达式匹配到的第一处内容替换成replacement_str

gsub(regex,replacement_str,string):
和sub()类似。不过该函数会替换正则表达式匹配到的所有内容

match(regex,string):
检查正则表达式是否能够匹配字符串。如果能够匹配,返回非0值;否则,返回0.match()有两个相关的特殊变量,分别是RSTART喝RLENGTH。变量RSTART包含正则表达式所匹配内容的其实位置,而变量RLENGTH包含正则表达式所匹配内容的长度。 
 

举例:

1.

 
 
  1. $ awk '{ sub(/test/, "mytest"); print }' testfile 

在整个记录中匹配,替换只发生在第一次匹配发生的时候

2.

 
 
  1. $ awk '{ sub(/test/, "mytest"); $1}; print }' testfile 

在整个记录的第一个域中进行匹配,替换只发生在第一次匹配发生的时候

3.

 
 
  1. $ awk '{ print index("test", "mytest") }' testfile 

实例返回test在mytest的位置,结果应该是3

4.

 
 
  1. $ awk '{ print length( "test" ) }' 

实例返回test字符串的长度。 










本文转自 wws5201985 51CTO博客,原文链接:http://blog.51cto.com/yjplxq/964519,如需转载请自行联系原作者
目录
相关文章
|
7月前
|
存储 Unix Shell
Shell 输出命令完全指南:echo 与 printf 的深度剖析
本文深入解析了 Shell 编程中 `echo` 和 `printf` 两个核心输出命令的用法与区别。`echo` 简单易用,适合基础输出;`printf` 功能强大,支持复杂格式化。文章从语法、转义序列、高级技巧到实际应用场景(如日志记录、进度显示)逐一讲解,并对比两者的性能与适用场景,帮助开发者根据需求灵活选择。最后通过进阶技巧和常见问题解答,进一步提升对两者的掌握程度。
391 1
|
8月前
|
网络协议 Shell 网络安全
面试官想听的不仅是命令——如何结构化回答“容器无Shell时如何测试外网”?
“说说看,如果一个Pod的容器没有Shell,如何测试它能否访问外网?”
面试官想听的不仅是命令——如何结构化回答“容器无Shell时如何测试外网”?
|
10月前
|
运维 Shell 数据库
Python执行Shell命令并获取结果:深入解析与实战
通过以上内容,开发者可以在实际项目中灵活应用Python执行Shell命令,实现各种自动化任务,提高开发和运维效率。
320 20
|
10月前
|
安全 Shell 数据处理
使用Python执行Shell命令并获取结果
在实际应用中,可以根据需要选择适当的参数和方法来执行Shell命令,并处理可能出现的各种情况。无论是系统管理、自动化任务还是数据处理,掌握这些技巧都将极大地提高工作效率。
362 12
|
2月前
|
存储 安全 Unix
七、Linux Shell 与脚本基础
别再一遍遍地敲重复的命令了,把它们写进Shell脚本,就能一键搞定。脚本本质上就是个存着一堆命令的文本文件,但要让它“活”起来,有几个关键点:文件开头最好用#!/usr/bin/env bash来指定解释器,并用chmod +x给它执行权限。执行时也有讲究:./script.sh是在一个新“房间”(子Shell)里跑,不影响你;而source script.sh是在当前“房间”里跑,适合用来加载环境变量和配置文件。
419 9
|
2月前
|
存储 Shell Linux
八、Linux Shell 脚本:变量与字符串
Shell脚本里的变量就像一个个贴着标签的“箱子”。装东西(赋值)时,=两边千万不能有空格。用单引号''装进去的东西会原封不动,用双引号""则会让里面的$变量先“变身”再装箱。默认箱子只能在当前“房间”(Shell进程)用,想让隔壁房间(子进程)也能看到,就得给箱子盖个export的“出口”戳。此外,Shell还自带了$?(上条命令的成绩单)和$1(别人递进来的第一个包裹)等许多特殊箱子,非常有用。
307 2
|
5月前
|
Shell
Shell脚本循环控制:shift、continue、break、exit指令
使用这些命令可以让你的Shell脚本像有生命一样动起来。正确使用它们,你的脚本就能像一场精心编排的舞蹈剧目,既有旋律的起伏,也有节奏的跳跃,最终以一场惊艳的表演结束。每一个动作、每一个转折点,都准确、优雅地完成所需要表达的逻辑。如此,你的脚本不只是冰冷的代码,它透过终端的界面,跳着有节奏的舞蹈,走进观众——使用者的心中。
268 60
|
2月前
|
数据采集 监控 Shell
无需Python:Shell脚本如何成为你的自动化爬虫引擎?
Shell脚本利用curl/wget发起请求,结合文本处理工具构建轻量级爬虫,支持并行加速、定时任务、增量抓取及分布式部署。通过随机UA、异常重试等优化提升稳定性,适用于日志监控、价格追踪等场景。相比Python,具备启动快、资源占用低的优势,适合嵌入式或老旧服务器环境,复杂任务可结合Python实现混合编程。
|
8月前
|
关系型数据库 MySQL Shell
MySQL 备份 Shell 脚本:支持远程同步与阿里云 OSS 备份
一款自动化 MySQL 备份 Shell 脚本,支持本地存储、远程服务器同步(SSH+rsync)、阿里云 OSS 备份,并自动清理过期备份。适用于数据库管理员和开发者,帮助确保数据安全。
|
4月前
|
Web App开发 缓存 安全
Linux一键清理系统垃圾:释放30GB空间的Shell脚本实战​
这篇博客介绍了一个实用的Linux系统盘清理脚本,主要功能包括: 安全权限检查和旧内核清理,保留当前使用内核 7天以上日志文件清理和系统日志压缩 浏览器缓存(Chrome/Firefox)、APT缓存、临时文件清理 智能清理Snap旧版本和Docker无用数据 提供磁盘空间使用前后对比和大文件查找功能 脚本采用交互式设计确保安全性,适合定期维护开发环境、服务器和个人电脑。文章详细解析了脚本的关键功能代码,并给出了使用建议。完整脚本已开源,用户可根据需求自定义调整清理策略。
554 0