我有一个包含以下列的文件:
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有没有办法颠倒列的顺序,让名字出现在第一列,他们获得的奖项数量出现在第二列?
发布于 2017-04-04 16:56:53
awk可以做到这一点:
awk '{a[$1FS$2]++}END{for(i in a)print i,a[i]}' file如果希望对其进行排序,可以使用管道和排序,也可以使用awk自己的数组排序函数
发布于 2017-04-04 16:38:58
这里有一些想法,一个使用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如果你想让它更美观,你可以在名称和count之间使用非空格分隔符,并通过管道连接到列:
$ 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 2https://stackoverflow.com/questions/43201122
复制相似问题