如何从用户文件中获取下一个可用的UID

时间:2016-11-08 22:39:15

标签: unix awk

我正在尝试从我的文件中的用户列表中打印下一个可用UID,我通过搜索字段并在END部分添加1来实现该目标。我也编写了在该文件上运行的脚本。现在具有挑战性的部分是,我必须考虑忽略特定用户之前的行,例如:“CS241-06”并检查下一个可用的UID。

这是我的文件名myrunfile1:

BEGIN {
 FS = ":" ; uID = 0; printf "\tNext Available UID is:\n"
}
{
      if ($1 == "CS241-06")
      {
        lineNumber = NR

          if ($3 > uID && NR >= lineNumber)
          {
               uID = $3
          }
     }
}
END{
printf "\t\t%d\n",uID+1
}

这是我的脚本文件:

awk -f scriptfile myfile

我的跑步命令:

app.get('/', function (req, res) {
  res.statusCode = 302;
  res.setHeader("Location", "http://www.url.com/page");
  res.end();
});

在特定用户之前忽略行之后我的预期输出应为806.我无法使其工作。请指导我。

1 个答案:

答案 0 :(得分:0)

awk解决方案:

awk -F: -v user=CS241-06 '$1 == user {p=1} p && uid < $3 {uid=$3} END {print ++uid}'

<强>解释

awk -F:                 # split on :
    -v user=CS241-06    # set variable
    '
       $1 == user {p=1}             # if column 1 matches user, set a variable
       p && uid < $3 { uid = $3}    # set another variable, only if p is set
       END {print ++uid}            # print next available uid
     ' 

输出

806   

Awk脚本

#!/bin/awk -f

$1 == user {p = 1}
p && uid < $3 {uid = $3}
END {print ++uid}

要运行脚本,请执行以下操作:

awk -F: -v user=CS241-06 -f /tmp/test.awk /tmp/data

请注意,在awk中,变量以0值开头。