1

テキスト ファイル固有のレコード番号付けについてサポートが必要です。これはldifファイルで、約2GBになります。処理機はunixなのでawkと入力。すでに nl と cat を試しましたが、より複雑に見え、awk はこのタスクに適しているように見えます。私は sql に精通していますが、これはそれに近いものではありません :-)

目標は、グループとグループの要素の数値の一意性を保証することです。

  1. 属性 'dn:' で始まるデータ グループの各行に繰り返し番号を持つ列を追加します (繰り返し行番号またはカウンターにすることができます) 重要なことは、グループ間で一意である必要があることです。
  2. 属性が繰り返される場合、増分番号で列を追加します。

入力:

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
4

1 に答える 1

2
$ awk -F':' '{if (NF) {$0 = (grpNr+1) OFS (++eltCnt[$1]) OFS $0} else {++grpNr; delete eltCnt}} 1' file
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
于 2016-10-12T23:16:13.787 に答える