Unix 如何使用uniq-c选项进行自定义格式设置?

Unix 如何使用uniq-c选项进行自定义格式设置?,unix,uniq,Unix,Uniq,来自维基百科: uniq -c生成默认样式的输出报告,但每行前面都有一个发生次数的计数。如果指定了此选项,则如果同时存在或同时存在-u和-d选项,则将忽略它们 在我的机器上,它是把计数数字放在每一行的开头。我想要的是把它放在行的末尾,逗号之后。如何做到这一点 例如: aa aa bb cc cc dd 应改为: aa,2 bb,1 cc,2 dd,1 你可以试试这样的- awk '{a[$1]++}END{for (i in a) print i,a[i] | "sort"}' OFS=",

来自维基百科:

uniq
-c生成默认样式的输出报告,但每行前面都有一个发生次数的计数。如果指定了此选项,则如果同时存在或同时存在-u和-d选项,则将忽略它们

在我的机器上,它是把计数数字放在每一行的开头。我想要的是把它放在行的末尾,逗号之后。如何做到这一点

例如:

aa
aa
bb
cc
cc
dd
应改为:

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

你可以试试这样的-

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)
测试2:
[jaypal:~/Temp]awk-vofs=“,”{print$2,$1}'像这样简单的事情,
sed
awk


uniq-c inputfile.txt | sed-e的/^*\([0-9]\+\)\(.\+\)/\2、\1/'
我会使用
awk
,因为我觉得它可读性最好

% uniq -c /path/to/input_file | awk -v OFS=',' '
{
    print $2, $1
}
'
aa,2
bb,1
cc,2
dd,1

…虽然有时更神秘。但这不是第二次通过来完成吗?有没有一种更快的方法,只需一次完成所有工作?或者,传球是同时完成的吗?@Jonah-这个和Jaypal的答案都使用Unix的方式来做事情。。。构建简单工具的管道。您正在调用两个单独的程序,但是将
uniq
的输出连接到
sed
的输入,它们会并发执行-sed不必等待uniq完成,并且在多核或多处理器机器上,它们实际上会并行执行。(我会把他的测试2作为
uniq-c文件| awk-v布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉布拉
因为我认为更清楚的是你在做uniq之后再做awk(或sed))@Jonah如果你想。它不使用
uniq
。它将文件存储在数组中,并使用for循环打印出值。它会按照您希望输出的样子对它们进行排序
awk
具有关联数组,这会导致输出被随机打印。哦,对了。谢谢你纠正我。我删除了我的评论。
[jaypal:~/Temp] awk -v OFS="," '{print $2,$1}' <(uniq -c file)
aa,2
bb,1
cc,2
dd,1
[jaypal:~/Temp] while IFS=' +|,' read count text; do 
echo "$text,$count"; 
done < <(uniq -c tmp)
aa,2
bb,1
cc,2
dd,1
% uniq -c /path/to/input_file | awk -v OFS=',' '
{
    print $2, $1
}
'
aa,2
bb,1
cc,2
dd,1