1
テキストファイルに固有のレコード番号で助けが必要です。 これはldifファイルで約2GBです。処理機械はunixなので、awkをタイプしました。既にnlとcatを試していますが、もっと複雑に見えますが、awkはSQLに慣れていますが、これに近いです:-)UNIXでファイル内の各グループの行番号をawkのprobabiltyに基づく
目標はグループとグループの要素の数値の一意性を保証することです:
- 属性で始まるデータグループ内の各行に番号を繰り返すことでカラムを追加「dnは:」(それは行番号やカウンターを繰り返すことができる)重要なことは、それがグループ間で一意である必要があります。
- 属性が繰り返されているときは、増分番号で列を追加します。
入力:
dn: uc=an
version: 12
dn: uid=fcb
uid: ljfhsfff
missdata: at12
missdata: at3
fladata: part2
fladata: part3
fladata: part1
dn: uid=fccb
uid: kjhfa8
missdata: at1
missdata: at8
missdata: at10
missdata: at14
fladata:: a06b6a==
fladata: part3
att: dsc
出力(可能性の1つ):
1 1 dn: uc=an
1 1 version: 12
2 1 dn: uid=fcb
2 1 uid: ljfhsfff
2 1 missdata: at12
2 2 missdata: at3
2 1 fladata: part2
2 2 fladata: part3
2 3 fladata: part1
3 1 dn: uid=fccb
3 1 uid: kjhfa8
3 1 missdata: at1
3 2 missdata: at8
3 3 missdata: at10
3 4 missdata: at14
3 1 fladata:: a06b6a==
3 2 fladata: part3
3 1 att: dsc
以前にご回答を見た - あなたは最高です。これはLinuxで期待どおりに動作しますが、これはsolarisなので、delete eltCntをsplit( ""、array、 ":")に置き換え、おそらくnawkを正しく使うべきでしょうか? – jareeq
Solarisでは、nawk(POSIXより前)ではなく/ bin/awk(old、broken awk)ではなく/ usr/xpg4/bin/awkを使用する必要があります。はい、あなたは 'delete eltCnt'の代わりに' split( ""、eltCnt) 'を使う必要がありますが、後者を最初に試してみる必要があります。 split()を使用した場合、3rg argは必要ありません。 –
もう一度エド、昨日このバージョンを見つけて、 'delete'を実装しました。その間、私はawkに精通し、ldifからcsvにデータを直接ピボットできることに気付きました。例に基づいて、私はすでにスクリプトを使っていますが、残念なことに、同じ名前の複数の属性を操作することはできません(上記と同じです)。私はこれを理解しようとするか、すでにやったことで新しい質問をします。 – jareeq