Awkを使用したLDAP DNのサブストリングの一致

Awkを使用したLDAP DNのサブストリングの一致

LDAPクエリを解析した結果を探しています。印刷中のDNから特定のOU値を取得したいと思います。

dn: ObjectName=Value,ou=12,ou=Users,dc=example,dc=com

3つの属性値を検索していますが、印刷したいDNの一部としてou = [\ d] {1,2}のみを印刷したいと思います。以下は、完全なDNを提供するコードの例です。

<LDAP SEARCH QUERY> | awk -F': ' '/dn: /{dn=$2}/^Attribute1: /{Attribute1=$2}/^Attribute2: /{print dn","Attribute1","$2}'

例では、ou = 12をどのように解析するのかわかりません。私は成功しなかった他のいくつかを試しました。私はこれをするためにAwkを使いたいです。これは複数のシステムに移植され、perl / pythonはすべての場合にオプションではないからです。 grep -oを使用するのと同じですが、代わりにawkを使用しているようです。

希望の出力は次のとおりです。

12,Attribute1,Attribute2

ベストアンサー1

デフォルトのawkを使用している場合は、見つかったdn変数の値を文字列で区切られた部分に分割して",ou="ou=最初のものではないと仮定して)数字を見つけることができます(またはそのフィールドが常に2番目のものであることを知っている場合は分割)。ポイント):

n = split(dn,x,",ou=")
for(i=1;i<=n;i++)if(x[i]+0==x[i])v = x[i]
# or just do:  v = x[2]

入力例では、xインデックス 1、2、3 から次の値を持つ配列を取得します。

ObjectName=Value
12
Users,dc=example,dc=com

0文字列に追加して数値をテストします。 awkは文字列を数字(または数字以外の場合は0)に変換します。結果が元の文字列と等しい場合は、単純な数値を取得します。

あるいは、gnu awkがある場合は、一致gensubパターンを使用して()数値部分をキャプチャしてdn全体の値を置き換えることもできます。

v = gensub(".*,ou=([0-9]{1,2}),.*","\\1",1,dn)

おすすめ記事