使用awk获取特定格式的用户名

时间:2019-04-15 16:42:18

标签: awk

我在这个问题上苦苦挣扎了两个星期,无法深入探究。 基本上,我必须显示系统中所有具有由字母数字字符组成的登录名的登录名(用户),以及使用awk的数字总和。 基本上来自此文件:

123molly456:x:98:98::/home/molly:/bin/bash
molly456:x:98:98::/home/molly:/bin/bash
molly:x:98:98::/home/molly:/bin/bash

输出必须为:

123molly456 21
molly456 15 

谢谢。

3 个答案:

答案 0 :(得分:0)

<file awk -F : '
    $1 ~ /^[[:alnum:]]+$/ {
        for (i=1; i<10; i++) t += i*gsub(i,i,$1)
        print $1,t
    }
'
  • -F :-分为:
  • 上的字段
  • $1 ~-$1必须为“字母数字”
  • for-测试从1到9的数字
  • gsub-计算i$1的出现(我们不更改$1
  • t+=-累积结果
  • print-输出总计

答案 1 :(得分:0)

请您尝试遵循。(应该在各种awk中使用)

awk -F':' '
{
  val=$1
  gsub(/[^0-9]+/,"",$1)
  gsub(/./,"& ",$1)
  num=split($1,array," ")
  for(i=1;i<=num;i++){
     sum+=array[i]
  }
  if(sum!=""){
     print val,sum
  }
  val=sum=""
}' Input_file

答案 2 :(得分:0)

$ awk -F':' '
    {
        id = $1
        gsub(/[^0-9]/,"",id)
        lgth = length(id)
    }
    lgth {
        sum = 0
        for (i=1; i<=lgth; i++) {
            sum += substr(id,i,1)
        }
        print $1, sum
    }
' file
123molly456 21
molly456 15