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)
答え2
これが私がしたことです。
awk -F': ' '/^dn: /{split($2, ou, "," seps)}/^Attribute1/{Attribute1=$2}/^Attribute2/{print ou[2]","$2","Attribute1}'
"ou ="はまだ存在しますが、それに対応するためにスクリプトを簡単に変更できます。
ou=12,Attribute1,Attribute2