最初のパターンがユーザー名と一致すると、2番目のパターンの値が印刷されます。

最初のパターンがユーザー名と一致すると、2番目のパターンの値が印刷されます。

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

関連情報