我有一个包含名称的文件,每行一个。我想按字母顺序打印名称,但是(这里至少让我感到困惑的是)每个名字旁边我必须打印该名称的出现次数,名称和出现次数之间只有一个空格。 / p>
例如,如果文件包含以下名称:
Barry
Don
John
Sam
Harry
Don
Don
Sam
必须打印
Barry 1
Don 3
Harry 1
John 1
Sam 2
有什么想法吗?
答案 0 :(得分:1)
使用awk:
% 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