如何从日志文件提取committed属性值?寻求更简便方案
提取日志中committed对应数值的简便方案
当然有更简便的办法!针对你日志里的格式,这里有几个直接一步到位的awk命令,不用额外处理:
方法1:使用正则捕获组(最精准,不受字段位置影响)
这个方法通过正则匹配committed=后面的数字部分,不管它在整行的哪个位置都能提取:
awk '{print gensub(/.*committed=([0-9]+)KB\)/, "\\1", "g")}' file.txt
- 原理:
gensub是awk的正则替换函数,([0-9]+)捕获我们需要的数字,\\1引用这个捕获到的内容,直接输出纯数字。
方法2:自定义字段分隔符
把=、)、,和空格都设为分隔符,直接定位到目标数值:
awk -F '[=,) ]+' '{print $6}' file.txt
- 原理:
-F '[=,) ]+'指定多个分隔符,拆分后committed对应的数值就是第6个字段,直接打印即可。
方法3:对原结果做快速替换
如果你想基于原来的命令改进,只需要在awk里直接处理$4:
awk '{sub(/committed=/, "", $4); sub(/KB\)/, "", $4); print $4}' file.txt
- 原理:先用
sub去掉$4里的committed=前缀,再去掉末尾的KB)后缀,剩下的就是你要的纯数字。
这几个方法都能直接输出1728469,不用额外管道处理~
内容的提问来源于stack exchange,提问作者Carla
相关产品推荐
相关产品推荐

