Ответ 1
Подключите выход к
sed -e 's/^ *//;s/ /,/'
Это сначала удаляет ведущие пробелы (^ *
), а затем заменяет первое пространство запятой.
Я хочу, чтобы вывод команды 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, aka BSD) не дает никакого способа справиться с этим. Лучше всего, вероятно, sed
:
... |
uniq -c |
sed 's/^ *\([0-9][0-9]*\) /\1,/'
Вывод из uniq -c
состоит из некоторых пробелов, числа, пробела и входной строки.
Основная идея заключается в том, что sed
script ищет произвольное количество пробелов, число и пробел и заменяет их числом и запятой. Рассматривая спецификацию 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 это также будет работать:
printf '%s,%s\n' $( ...various commands... | uniq -c )