Вы можете использоватьtr
tr '\n',
Это изменит каждый экземпляр \n
на запятую, поэтому вам нужно исправить последний. Вот пример
cat >file.txt <<x
8600
22007
93509
9984
22146
x
tr '\n', <file.txt
8600,22007,93509,9984,22146, # and the shell prompt follows immediately
tr '\n', <file.txt | sed 's/,$/\n/'
8600,22007,93509,9984,22146 # line is ended with newline
Обратите внимание, что такое использование sed
не определено стандартом POSIX, который предполагает, что все строки завершаются символом новой строки. Вы можете исправить это, вставив awk 1
в конвейер, потому что awk
явно определено POSIX для добавления завершающей новой строки к последней строке, если она отсутствует:
tr '\n', <file.txt | awk 1 | sed 's/,$//'
8600,22007,93509,9984,22146 # line is ended with newline
Для быстрого исправления это было бы приемлемым (хотя paste
решение, предлагаемое в другом месте, лучше ). Однако tr | awk | sed
— уродливая комбинация, которую следует пересмотреть в производственном коде. Таким образом, мы можем закончить с этим:
awk 'NR>1 {printf ","}; {printf "%s", $0}; END {printf "\n"}' file.txt
A general solution that does not rely on Pulseaudio would be ideal.
Большинство, если не все, популярные современные дистрибутивы Linux используют Pulseaudio, который открывает устройства с ядром ALSA и держит их постоянно открытыми, что означает, что решение, вероятно, должно включать его.
Кроме того, если PA установлен и запущен, приложения не могут выполнять чтение и запись на устройства ядра ALSA, поскольку PA открывает их исключительно.
Вот быстрая команда, которая, если она возвращает какие-либо выходные данные, означает, что ваши устройства ввода используются:
pacmd list-sources | grep RUNNING