awk引用外部变量进行匹配操作

本文介绍如何使用Gawk脚本从系统日志中精确匹配并提取指定进程(com.XXXX.stb.agent)的内存使用情况,通过设置变量$name并利用正则表达式进行灵活匹配,避免了硬编码带来的局限性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

源文件如下:

# cat data.txt

6426  3   4% S    53 701632K  30232K  bg u0_a52   com.XXXX.stb.agent
** MEMINFO in pid 6426 [com.XXXX.stb.agent] **
         4       56             42       86/606/5  /data/data/com.XXXX.stb.agent/databases/preference.db

6426  3   4% S    53 701632K  30232K  bg u0_a52   com.XXXX.stb.agent
** MEMINFO in pid 6426 [com.XXXX.stb.agent] **
         4       56             42       86/606/5  /data/data/com.XXXX.stb.agent/databases/preference.db

6426  3   4% S    53 701632K  30232K  bg u0_a52   com.XXXX.stb.agent
** MEMINFO in pid 6426 [com.XXXX.stb.agent] **
         4       56             42       86/606/5  /data/data/com.XXXX.stb.agent/databases/preference.db

只想匹配com.XXXX.stb.agent结尾的行,并且不使用硬编码的方式匹配出。

脚本如下:

# cat t.sh

#!/bin/sh
name="com.XXXX.stb.agent"
gawk 'BEGIN{FS=" "}'"/$name$/"'{print $4}' $1

然后执行sh t.sh data.txt

输出结果为:

4%

4%

4%

命令解释:

gawk 'BEGIN{FS=" "}'"/$name$/"'{print $4}' $1

BEGIN表示在执行gawk程序前要执行的代码块,代码块内容是指定输入分隔符为空格,

然后使用$name变量的值匹配,并且注意是以$name结尾,第二个$符表示前面的字符是最后一个字符。

$4表示打印第4个字段,$1为命令行的第一个参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值