如果第一个模式与用户名匹配,则打印第二个模式的值

如果第一个模式与用户名匹配,则打印第二个模式的值

我一直在尝试编写一个脚本awk,如果用户名与输入变量匹配,则打印用户角色组的名称。

输入文件类似于以下内容

sssss
xxxname
trevor
xxxage
21
xxxrolegroups
activedir
sssss
xxxname
gus
xxxage30
xxxrolegroups
sssss

如您所见,该文件由sssss.我知道我正在寻找的名称是trevor,并且我希望脚本打印该值activedir。这些字段并不总是按相同的顺序(有多个字段,这只是一个示例)。

我尝试了以下...

USERNAME=`cat trevor.txt`
awk 'BEGIN {RS="sssss"; FS="\n";} if username=$USERNAME then {awk '/xxrolegroups/ {getline; print }}'

请原谅伪代码,只是想传达我想要做的事情:-)

谢谢

答案1

您可以使用这样的脚本。我将其分开以提高可读性,但如果您愿意,您可以直接连接所有行:

awk -v key=trevor '
    BEGIN { RS="^sssss$"; RE="\n" key "\n" }
    $0 ~ RE && /activedir/ { print "activedir" }
' datafile.txt

它将记录分隔符设置为由以下内容组成的行sssss,并创建一个将键trevor与该记录中的整行相匹配的正则表达式。然后,如果它可以匹配 RE 并且发现activedir它会打印所需的文本。

相关内容