問題がありますが、理解できません。ソラリスです。過度に単純化されたソースと参照ファイル。
s.txtソースファイル:
dn: cn=task,cn=Groups,dc=domain
changetype: modify
add: uniquemember
uniquemember: cn=user1,cn=users,dc=domain
dn: cn=task,cn=Groups,dc=domain
changetype: modify
add: uniquemember
uniquemember: cn=user9,cn=users,dc=domain
dn: cn=task,cn=Groups,dc=domain
changetype: modify
add: uniquemember
uniquemember: cn=user10,cn=users,dc=domain
r.txt 参照ファイル:
uniquemember: cn=user9,cn=users,dc=domain
uniquemember: cn=user8,cn=users,dc=domain
参照レコードUnicamemberファイルを使用して、ソースファイルのcn = user9行と上記の3行を抽出し、結果ファイルusermember_に追加するスクリプトが必要です。
.ldif 追加:
dn: cn=task,cn=Groups,dc=domain
changetype: modify
add: uniquemember
uniquemember: cn=user9,cn=users,dc=domain
答え1
r.txt
次の値を使用しようとすると鍵一致する複数の行を抽出してs.txt
みてください。
awk 'NR==FNR {u[$2]++; next} $NF in u' r.txt RS= s.txt
r.txt
デフォルト(改行)レコード区切り文字を使用して処理し、u
2番目のスペースで区切られたフィールドのキーを使用して連想配列を構成します。RS=
切り替えるには、レコード区切り記号の設定をオフにします。短絡モード2番目のファイルの場合- 短絡モードで処理されます
s.txt
。つまり、各空行で区切られたブロックは単一のレコードとして扱われ、$NF
最後のフィールド値はルックアップ値として使用できます。u
$NF
存在する場合は、u
履歴全体を印刷します。
一致するレコード間にスペースを追加するには:
GNU awk()がある場合は、特殊変数を使用して元の段落を再追加できgawk
ます。RT
gawk 'NR==FNR {u[$2]++; next} $NF in u {print $0 RT}' r.txt RS= s.txt
より一般的には、一致する各レコードの後に改行を追加できます。
awk 'NR==FNR {u[$2]++; next} $NF in u {print $0 "\n"}' r.txt RS= s.txt
またはデフォルト値に改行を追加出力フィールド区切り記号:
awk 'NR==FNR {u[$2]++; next} $NF in u' r.txt RS= ORS='\n\n' s.txt
答え2
user
あなたの質問によると、コードを使用してキーワードを読み、そのr.txt
キーワードを検索したいことを理解していますs.txt
。最後に、キーワードに関連する行を(最初の3行で)印刷しますin s.txt
。次の行を次のファイルに書き込むことができます"code"
。
#!/bin/bash
if [[ `egrep user9 r.txt` ]] ; then
grep -B 3 user9 s.txt
fi
このファイルに権限を付与し、"code"
次のように端末で実行します。
code > add.ldif
出力は次のとおりです
dn: cn=task,cn=Groups,dc=domain
changetype: modify
add: uniquemember
uniquemember: cn=user9,cn=users,dc=domain
user9
次の項目に2つあるとしましょうs.txt
。
dn: cn=task,cn=Groups,dc=domain
changetype: modify
add: uniquemember
uniquemember: cn=user1,cn=users,dc=domain
dn: cn=task,cn=Groups,dc=domain
changetype: modify
add: uniquemember
uniquemember: cn=user9,cn=users,dc=domain
dn: cn=task,cn=Groups,dc=domain
changetype: modify
add: uniquemember
uniquemember: cn=user18,cn=users,dc=domain
dn: cn=XXX,cn=XXX,dc=XXX
changetype: XXX
add: XXX
uniquemember: cn=user9,cn=users,dc=domain
前のコードはuser9の2つのエントリを探します。
dn: cn=task,cn=Groups,dc=domain
changetype: modify
add: uniquemember
uniquemember: cn=user9,cn=users,dc=domain
--
dn: cn=XXX,cn=XXX,dc=XXX
changetype: XXX
add: XXX
uniquemember: cn=user9,cn=users,dc=domain