Shell语言-25-处理工具之awk

1. 简述

一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理。

1.1 基本用法

awk ‘BEGIN{ commands } pattern{ commands } END{ commands }’

  • pattern:表示AWK在数据中查找的内容,就是匹配模式
  • action:在找到匹配内容时所执行的一系列命令

1.1.1 开始块 BEGIN 语法 BEGIN {awk-commands}

开始块是程序启动的时候执行的代码部分,并且只在整个过程中执行一次,一般情况下我们可以在开始块当中初始化一些变量
它是awk的关键字,因为必须大写,但它又是可选部分,你得程序可有可无;

1.1.2 主体 BODY 语法 pattern{ commands }

对于每一个输入的行都会执行一次主体部分的命令,默认情况下,对于输入的每一行,awk都会执行命令,但是我们可以将其限定在指定的模式中
注意:在主体部分没有关键字的存在;

1.1.3 结束块END 语法 END{ commands }

它是是程序结束的时候执行的代码部分,是awk的关键字,因为必须大写,但它又是可选部分,你得程序可有可无
在这里插入图片描述

1.2 参数说明

选项参数	      功能
-F	       指定输入文件折分隔符
-v	       赋值一个用户定义变量

1.3 awk的内置变量

变量          	    说明
FILENAME	     文件名
NR	             已读的记录数
NF	             浏览记录的域的个数

切割IP 案列

[root@Centos-root473791 ~]# ifconfig eth0 | grep "inet addr" | awk -F: '{print $2}' | awk -F " " '{print $1}' 
192.168.2.133
[root@Centos-root473791 ~]# 

查询sed.txt中空行所在的行号

[root@Centos-root473791 ~]# cat sed.txt 
hh hh 

hh
[root@Centos-root473791 ~]# awk '/^$/{print NR}' sed.txt 
2
[root@Centos-root473791 ~]# 

1.3 案列

1.3.1 awk ‘{print}’ awk.txt

在命令行直接输入awk指令,逐行读取文件awk.txt内容并打印**
在这里插入图片描述

1.3.2. awk ‘{print $0}’ awk.txt

#逐行读取文件awk.txt内容并打印改行,$0保存的是当前行的内容**
在这里插入图片描述

1.3.3 awk ‘{print “hello”}’ awk.txt

#逐行读取awk.txt文件内容,每行结束后打印一个hello,文件awk.txt有多少行就打印多少个hello**
在这里插入图片描述

1.3.4.awk ‘{print $1}’ awk.txt

#打印awk.txt的第一列内容,在不指定分割符的情况下,awk默认使用空白做分割符**
在这里插入图片描述

1.3.5 awk -F “:” ‘{print $1}’ /etc/passwd

#以":"为分隔符打印/etc/passwd文件的第一例内容**

1.3.6 Shell-awk-将awk指令写入文件,通过-f选项调用

将awk指令写入文件,通过-f选项调用

vim  awkscript

BEGIN{
FS=":"
}
{print $1}
awk -f awkscript  /etc/passwd

1.4 begin和end

实例3:awk的BEGIN块和END块

BEGIN用于初始化FS变量(列分隔符),打印标题,或者初始化后需要在程序中调用的全局变量
END用于执行最后的运算或者打印最终的输出结果
END块和BEGIN不是必须的

1.5 在awk中使用正则匹配

1.5.1. awk ‘/Hello/{print}’ awk.txt #打印awk.txt中匹配Hello的那一行内容

在这里插入图片描述

1.5.2. awk -F “:” ‘/123/{print $2}’ 1.txt

#以":"为分隔符打印1.txt中匹配123的那一行中,第二列的内容
在这里插入图片描述

1.5.3. awk -F “:” ‘$1 ~ /root/{print $2}’ /etc/passwd

#打印/etc/passwd中,第一列匹配root的行其第二列的内容 ~表示匹配
在这里插入图片描述

1.5.4 使用Linux命令计算第二列的和并输出

[root@Centos-root473791 ~]# cat sum.txt 
张三 40
李四 50
赵六 60
[root@Centos-root473791 ~]# cat sum.txt | awk -F " " '{sum+=$2} END{print sum}'
150
[root@Centos-root473791 ~]# 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alan0517

感谢您的鼓励与支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值