首页 > 解决方案 > AWK - 基于正则表达式的增值

问题描述

我必须在 linux 中使用 awk 添加 REGEX 返回的数字。

基本上来自这个文件:

123john456:x:98:98::/home/john123:/bin/bash

我必须添加数字123456使用 awk。所以结果是579

到目前为止,我已经完成了以下工作:

awk -F ':' '$1 ~ VAR+="/[0-9].*(?=:)/" ; {print VAR}' /etc/passwd

awk -F ':' 'VAR+="/[0-9].*(?=:)/" ; {print VAR}' /etc/passwd

awk -F ':' 'match($1, VAR=/[0-9].*?:/) ; {print VAR}' /etc/passwd

从我所见,比赛根本不支持这一点。

有人有什么想法吗?

更新:它也应该适用于 john123结果->123 123john结果->123

标签: regexlinuxawk

解决方案


$ awk -F':' '{split($1,t,/[^0-9]+/); print t[1] + t[2]}' file
579

根据您的更新要求:

$ cat file
123john456:x:98:98::/home/john123:/bin/bash
john123:x:98:98::/home/john123:/bin/bash
123john:x:98:98::/home/john123:/bin/bash

$ awk -F':' '{split($1,t,/[^0-9]+/); print t[1] + t[2]}' file
579
123
123

推荐阅读