【问题标题】:Making duplicate record unique using awk使用 awk 使重复记录唯一
【发布时间】:2022-09-23 20:35:55
【问题描述】:

我正在尝试使用 awk 来识别文件中的重复记录并将更改直接应用于它。该文件有六列,没有标题。我的目标是编辑重复记录的第二列,使其每次出现时都加 1 以使其唯一。数据如下所示:

1 A B C D E
1 A B C D E   (This is a duplicate record1)
1 A B C D E   (This is a duplicate record2)
2 F G H I J
3 K L M N O

所需的输出

1 A   B C D E
1 A-1 B C D E
1 A-2 B C D E
2 F   G H I J
3 K   L M N O

编辑:

我从这篇帖子How to rename duplicate lines with awk? 中尝试了这个代码awk \'cnt[$0]++{$0=$0\" variant \"cnt[$0]-1} 1\' file,但数字被添加到记录的末尾

  • 欢迎来到 SO,您能否在您的问题中添加您尝试过的代码以使其更清楚,谢谢(不是我的反对票)。
  • @RavinderSingh13 我添加了我尝试过的代码

标签: awk duplicates


【解决方案1】:

awk 很简单

awk '!unique[$0]++ {print; next}{$2 = $2"-"++n; print}' file

条件 !unique[$0]++ 仅对之前未见过的行保持为真,在这种情况下,我们只需 print 新行并继续下一行。对于已经看到的行,我们使用计数器 - 修改 $2 并对其出现的运行计数。

或者一个非常有效的方式,计数器变量n 会出错,如果出现多于一组的重复行。尝试为每个重复事件保留一个唯一的计数器

awk '!unique[$0]++ {print; next}{$2 = $2"-"(unique[$0]-1); print}' file

【讨论】:

    【解决方案2】:

    使用您显示的示例,请尝试遵循awk 代码。

    awk '++arr1[$0]>1{$2=++arr[$2]>0?$2"-"arr[$2]:$2} 1' Input_file
    

    【讨论】:

      猜你喜欢
      • 2020-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-28
      • 1970-01-01
      • 1970-01-01
      • 2018-05-09
      • 2022-12-06
      相关资源
      最近更新 更多