shell学习

1.awk

1.1原理

  • 扫描输入文件:Awk 从输入文件逐行读取数据,每行作为一个记录,逐行读取文本,默认以空格或tab键为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令。可以通过指定的字段分隔符将每行分割成多个字段。

  • 模式匹配:对于每一行记录,Awk 可以执行指定的模式匹配操作,以确定是否应用相应的操作。模式可以是正则表达式、条件判断或特定的行号等。

  • 执行操作:当某行满足模式匹配条件时,Awk 执行指定的操作。操作可以是输出、计算、字符串处理、变量赋值等,以对数据进行处理。

  • 输出结果:根据执行的操作,Awk 可以生成输出结果。输出可以是打印到标准输出、格式化输出、写入文件等。

1.2 常见的内建变量

变量名称 描述
FS 指定每行文本的字段分隔符,默认为空格或制表位。
NF 当前处理的行的字段个数。
NR 当前处理的行的行号(序数)。
$0 当前处理的行的整行内容。
$n 当前处理行的第 n 个字段(第 n 列)。
FILENAME 被处理的文件名。
RS "行"分割符,AWK 从文件上读取资料时,将根据 RS 的定义把资料切割成许多条记录;AWK 一次仅读入一条记录,以进行处理,预设值是 \n。

1.3 实例

现在有个文件file.txt

c 复制代码
John Doe 25 55
Jane Smith 30
Adam Johnson 28
c 复制代码
awk '{print NF}' file.txt #打印当前行的字段数,空格隔开的数据,这里的结果是
	4
	3
	3
awk '{print NR}' file.txt #打印当前行的行号,这里的结果是
	1
	2
	3
awk '(NR>=2)&&(NR<=4)' file.txt  #打印第2--4行,注意print可以省略
awk '(NR==2)||(NR==4){print}' file.txt  #打印第2行和第4行
awk '(NR%2)==1{print}' file.txt  #打印奇数行
awk '{print $0}' file.txt # 打印当前行的所有字段,这里的结果是
	John Doe 25 55
	Jane Smith 30
	Adam Johnson 28
awk '{print $2}' file.txt # 打印当前行的第2列数据,这里的结果是
	Doe
	Smith
	Johnson
awk 'BEGIN {FS = "," } {print $2 $3}' file.txt #这里不在以默认的空格为分割符,而是以","为分隔符,然后打印文件每一行的第2列,第3列
awk '/^a/{print}' file.txt #打印以a开头的所有行  /***/ 表示***是一个正则表达式
awk '/hello$/{print}' file.txt #打印以hello结尾的所有行
awk -F ":" {print $4} file.txt #以:为分隔符,打印文件第四个字段
相关推荐
Lsetea11 小时前
OpenSSL s_client退出码为0却证书验证失败:严格校验与Shell管道排查
https·shell·ssl证书·openssl·tls
fox_charon2 天前
Windows 下 CLI 参数的引号陷阱:为什么 --resume 'uuid' 会失败
windows·shell·cmd·cli·引号
吴声子夜歌11 天前
Shell编程实例——编写安全的shell脚本(二)
linux·运维·shell
吴声子夜歌12 天前
Shell编程实例——内务及管理任务(一)
linux·运维·shell
吴声子夜歌12 天前
Shell编程实例——高级脚本编程(一)
linux·运维·网络·shell
吴声子夜歌12 天前
Shell编程实例——bash的配置与自定义(二)
linux·运维·shell
吴声子夜歌13 天前
Shell编程实例——与解析相关的任务(二)
linux·运维·shell
吴声子夜歌13 天前
Shell编程实例——脚本编程的附加特性
linux·运维·shell
云计算练习生13 天前
什么是内核?操作系统内核到底管哪些事
linux·windows·操作系统·内核·shell
吴声子夜歌16 天前
Shell编程实例——bash入门
linux·运维·shell