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
必要なテキストを印刷します。