我的文本文件读作:
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
我在这里指定了一个逗号作为分隔符,但是对于分隔符来说并不重要 - 我可以在将来修改它。实际上,我甚至不需要原始文本文件内容,只是行号,因为我可以将行号粘贴到原始文本文件。
我只是不确定如何根据重复的条目对行进行编号。
列表中的所有项目至少重复一次。文件中没有单行出现。
答案 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)
软件工具方法,将 textfile 作为输入:
uniq -c textfile | cut -d' ' -f7 | xargs -L 1 seq 1
基于Shell循环的上述变体:
uniq -c textfile | while read a b ; do seq 1 $a ; done
输出(任一方法):
1
2
1
2
3
1
2