按字母顺序打印名称以及每个名称的外观数量

时间:2016-10-16 16:45:44

标签: bash shell

我有一个包含名称的文件,每行一个。我想按字母顺序打印名称,但是(这里至少让我感到困惑的是)每个名字旁边我必须打印该名称的出现次数,名称和出现次数之间只有一个空格。 / p>

例如,如果文件包含以下名称:

Barry
Don
John
Sam
Harry
Don
Don 
Sam

必须打印

Barry 1
Don 3
Harry 1
John 1
Sam 2

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

使用

% awk '{
  a[$1]++
}
END{
  for (i in a) {
    print i, a[i]
  }
}' file

输出:

Barry 1
Harry 1
Don 3
John 1
Sam 2

答案 1 :(得分:1)

sort | uniq -c会让你非常接近,只需将列反转。

$ sort file | uniq -c
      1 Barry
      3 Don
      1 Harry
      1 John
      2 Sam

如果你真的需要它们在被禁止的顺序中,你可以用awk交换它们。

$ sort test.txt | uniq -c | awk '{print $2, $1}'
Barry 1
Don 3
Harry 1
John 1
Sam 2

答案 2 :(得分:0)

假设:

$ cat file
Barry
Don
John
Sam
Harry
Don
Don 
Sam

你可以这样做:

$ awk '{a[$1]++} END { for (e in a) print e, a[e] }' file | sort 
Barry 1
Don 3
Harry 1
John 1
Sam 2