2016-11-08 47 views
0

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

这里是我的文件名myrunfile1:

CS241-01:x:791:791:CS241-01:/home/CS241-01:/bin/bash 
CS241-02:x:892:892:CS241-02:/home/CS241-02:/bin/korn 
CS241-03:x:907:907:CS241-03:/home/CS241-03:/bin/bash 
CS241-04:x:794:794:CS241-04:/home/CS241-04:/bin/bash 
CS241-05:x:795:795:CS241-05:/home/CS241-05:/bin/bash 
CS241-06:x:796:796:CS241-06:/home/CS241-06:/bin/korn 
CS241-07:x:797:797:CS241-07:/home/CS241-07:/bin/bash 
CS241-08:x:798:798:CS241-08:/home/CS241-08:/bin/bash 
CS241-09:x:799:799:CS241-09:/home/CS241-09:/bin/korn 
CS241-10:x:800:800:CS241-10:/home/CS241-10:/bin/bash 
CS241-11:x:801:801:CS241-11:/home/CS241-11:/bin/korn 
CS241-12:x:802:802:CS241-12:/home/CS241-12:/bin/bash 
CS241-13:x:803:803:CS241-13:/home/CS241-13:/bin/bash 
CS241-14:x:805:805:CS241-14:/home/CS241-14:/bin/korn 
CS241-15:x:804:804:CS241-15:/home/CS241-15:/bin/bash 

这里是我的脚本文件:

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 

我的预期输出特定的用户应该是806.我无法完成这项工作。请用这个指导我。

回答

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开始的值。

+0

谢谢Rajput。您能否更新解决方案在脚本文件中的外观?对不起,但我是新手。谢谢。 – Venkata

+0

因此,我的理解..这个脚本的解决方案搜索用户(行),并忽略用户之前的行,并通过扫描行,包括和之后的用户行打印下一个可用的UID ..是这样吗? – Venkata

+0

我测试过了,输出总是最后一行UID的+1。我一般如果他们没有排序,如何处理? – Venkata

相关问题