Unix 根据模式可能使用 awk 为文件中的每个组重复行号
Unix repeat line number for each group in file based on patern probabelly with awk
我需要有关文本文件特定记录编号的帮助。
这是 ldif 文件,大约 2GB。处理机器是 unix 所以我输入了 awk。虽然已经尝试过 nl 和 cat 它看起来更复杂并且 awk 看起来很适合这个任务,但我熟悉 sql 但这并不接近它:-)
目标是保证组和组元素的数值唯一性:
- 在以属性'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 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
$ awk -F':' '{if (NF) {[=10=] = (grpNr+1) OFS (++eltCnt[]) OFS [=10=]} 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
我需要有关文本文件特定记录编号的帮助。 这是 ldif 文件,大约 2GB。处理机器是 unix 所以我输入了 awk。虽然已经尝试过 nl 和 cat 它看起来更复杂并且 awk 看起来很适合这个任务,但我熟悉 sql 但这并不接近它:-)
目标是保证组和组元素的数值唯一性:
- 在以属性'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 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
$ awk -F':' '{if (NF) {[=10=] = (grpNr+1) OFS (++eltCnt[]) OFS [=10=]} 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