我正在尝试从我的文件中的用户列表中打印下一个可用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.我无法使其工作。请指导我。
答案 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值开头。