如何在线本身旁边添加相同行数?

时间:2015-07-02 10:58:41

标签: linux bash shell grep wc

我的文件file.txt看起来像这样

a
b
b
c
c
c

我想知道get file.txt作为输入的命令并生成输出

a 1
b 2
c 3

3 个答案:

答案 0 :(得分:4)

我认为uniq是您正在寻找的命令。 uniq -c的输出与您的格式略有不同,但可以轻松修复。

$ uniq -c file.txt
      1 a
      2 b
      3 c

答案 1 :(得分:2)

如果您想计算出现次数,可以uniq使用-c

如果文件未排序,则必须先使用sort

$ sort file.txt | uniq -c
1 a
2 b
3 c

如果您确实需要先行后跟计数,请将列与awk

交换
$ sort file.txt | uniq -c | awk '{ print $2 " " $1}'
a 1
b 2
c 3

答案 2 :(得分:0)

你可以使用这个awk:

awk '!seen[$0]++{ print $0, (++c) }' file
a 1
b 2
c 3

seen是一个数组,只有在第一次填充索引时递增到1才能保存uniq项。在操作中,我们打印记录和递增计数器。

更新:根据下面的评论,如果想要在第二列中获得重复计数,请使用此awk命令:

awk 'seen[$0]++{} END{ for (i in seen) print i, seen[i] }' file
a 1
b 2
c 3