3

来自维基百科:

uniq
-c 以默认样式生成输出报告,但每行前面都有一个发生次数的计数。如果指定了此选项,则 -u 和 -d 选项(如果其中一个或两者都存在)将被忽略。

在我的机器上,它正在获取计数并将其放在每行的开头。我想要的是将它放在逗号之后的行尾。如何才能做到这一点?

例子:

aa
aa
bb
cc
cc
dd

应改为:

aa,2
bb,1
cc,2
dd,1
4

3 回答 3

9

你可以试试这样的 -

awk '{a[$1]++}END{for (i in a) print i,a[i] | "sort"}' OFS="," filename

或者

awk -v OFS="," '{print $2,$1}' <(uniq -c file)

或者

uniq -c file | awk '{printf("%s,%s\n",$2,$1)}'

或者

while IFS=' +|,' read count text; do 
    echo "$text, $count"; 
done < <(uniq -c tmp)

测试:

[jaypal:~/Temp] cat file
aa
aa
bb
cc
cc
dd

[jaypal:~/Temp] awk '{a[$1]++}END{for (i in a) print i,a[i] | "sort"}' OFS="," file
aa,2
bb,1
cc,2
dd,1

测试2:

[jaypal:~/Temp] awk -v OFS="," '{print $2,$1}' <(uniq -c file)
aa,2
bb,1
cc,2
dd,1

测试3:

[jaypal:~/Temp] while IFS=' +|,' read count text; do 
echo "$text,$count"; 
done < <(uniq -c tmp)
aa,2
bb,1
cc,2
dd,1
于 2012-01-20T23:07:05.580 回答
3

像这样简单的事情,sedawk

uniq -c inputfile.txt | sed -e 's/^ *\([0-9]\+\) \(.\+\)/\2,\1/'

于 2012-01-20T23:12:29.570 回答
2

我会使用awk,因为我觉得它最易读

% uniq -c /path/to/input_file | awk -v OFS=',' '
{
    print $2, $1
}
'
aa,2
bb,1
cc,2
dd,1
于 2012-01-21T00:23:30.457 回答