我有一个包含以下列的文件:
David Smith Bronze
Henry Jackson Silver
David Smith Bronze
Angela Wright Gold
Angela Wright Gold
David Smith Gold
David Smith Bronze
我试过写这段代码:
awk -F ',' '{if($6 == "name") print $6, $1}' filename.csv | sort | uniq -c
我的输出是:
4 David Smith
2 Angela Wright
1 Henry Jackson
是否有反转列以便名称出现在第一列中,并且他们收到的奖励数量出现在第二列?
答案 0 :(得分:1)
awk可以做到这一点:
awk '{a[$1FS$2]++}END{for(i in a)print i,a[i]}' file
如果你想要它排序你可以使用管道和排序或使用awk自己的数组排序函数
答案 1 :(得分:0)
以下是一些想法,一个是sed,另一个是awk:
$ cat names.txt
David Smith
Henry Jackson
David Smith
Angela Wright
Angela Wright
David Smith
David Smith
$ uniq -c names.txt
1 David Smith
1 Henry Jackson
1 David Smith
2 Angela Wright
2 David Smith
$ uniq -c names.txt | sed -E 's/([0-9]+) (.*$)/\2 \1/'
David Smith 1
Henry Jackson 1
David Smith 1
Angela Wright 2
David Smith 2
$ uniq -c names.txt | awk '{count=$1; for (i=1; i<NF; ++i) $i = $(i+1); $NF=count}1'
David Smith 1
Henry Jackson 1
David Smith 1
Angela Wright 2
David Smith 2
如果你想使它漂亮,你可以在名称和计数之间使用非空格分隔符并使用管道到列:
$ uniq -c names.txt | sed -E 's/([0-9]+) (.*$)/\2|\1/' | column -t -s \|
David Smith 1
Henry Jackson 1
David Smith 1
Angela Wright 2
David Smith 2