問題がありますが、理解できません。ソラリスです。過度に単純化されたソースと参照ファイル。
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