繁体   English   中英

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很熟悉,但这并不接近它:-)

目标是保证组和组元素的数值唯一性:

  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 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) {$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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM