我一直在尝试编写一个脚本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
它会打印所需的文本。