为文件中的重复行添加行号

时间:2016-11-19 00:40:22

标签: bash awk sed command-line data-manipulation

我的文本文件读作:

111
111
222
222
222
333
333

我的结果文件如下:

1,111
2,111
1,222
2,222
3,222
1,333
2,333

或者生成的文件可能如下所示:

1
2
1
2
3
1
2

我在这里指定了一个逗号作为分隔符,但是对于分隔符来说并不重要 - 我可以在将来修改它。实际上,我甚至不需要原始文本文件内容,只是行号,因为我可以将行号粘贴到原始文本文件。

我只是不确定如何根据重复的条目对行进行编号。

列表中的所有项目至少重复一次。文件中没有单行出现。

4 个答案:

答案 0 :(得分:5)

$ awk -v OFS=',' '{print ++cnt[$0], $0}' file
1,111
2,111
1,222
2,222
3,222
1,333
2,333

答案 1 :(得分:1)

使用变量保存上一行,并将其与当前行进行比较。如果它们相同,则递增计数器,否则将其设置为1。

awk '{if ($0 == prev) counter++; else counter = 1; prev=$0; print counter}'

答案 2 :(得分:0)

Perl解决方案:

perl -lne 'print ++$c{$_}' file
  • -n逐行读取输入行
  • -l处理换行符
  • ++$c{$_}会增加分配给哈希表$_中当前行%c内容的值。

答案 3 :(得分:0)

  1. 软件工具方法,将 textfile 作为输入:

    uniq -c textfile | cut -d' ' -f7 | xargs -L 1 seq 1
    
  2. 基于Shell循环的上述变体:

    uniq -c textfile | while read a b ; do seq 1 $a ; done
    
  3. 输出(任一方法):

    1
    2
    1
    2
    3
    1
    2