我希望uniq命令的输出以逗号分隔,这样就不会出现:
30 hello
31 world
36 hey_there
142 i_am_bigest
我会:
30,hello
31,world
36,hey_there
142,i_am_biggest
我的输入没有空格,但是仅仅使用sed
或tr
可能会出现问题,因为前导空格的数量根据计数中的十进制位数而变化
输出到
sed -e 's/^ *//;s/ /,/'
首先删除前导空格(^ *
),然后用逗号替换第一个空格。
man uniq
(至少在Mac OS X上,又名BSD)没有给出任何方法来处理。你最好的选择可能是sed
:
... |
uniq -c |
sed 's/^ *([0-9][0-9]*) /1,/'
uniq -c
的输出由一些空格、一个数字、一个空白和输入字符串组成。
基本思想是sed
脚本查找任意数量的空白,一个数字和一个空白,并用数字和逗号替换它。看看uniq
的POSIX规范,输出不应该有前导空白(printf()
格式应该是"%d %s"
),但在实践中,前导空白是正常的(对于足够小的重复计数;在Mac OS X上,输出的printf()
格式实际上是"%5d %s"
)。
输出到:
perl -lane '{print join ",", @F}'
-
使用
printf
works:xargs -L 1 printf '%s,%sn' < file
-
Using
bash
:printf '%s,%sn' $(<file)
-
在POSIX shell中这也可以工作:
printf '%s,%sn' $( ...various commands... | uniq -c )
使用@nneonneo的答案,我编写了这个函数并将其添加到我的。bashrc:
uniqc(){
uniq -c |sed -e 's/^ *//;s/ /,/'
}
用法,代替doSomething | uniq -c
,做:
doSomething | uniqc