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