Как в Bash вывести строку в одну строку с помощью разделителя?

Хорошо. Ответ был прост. Как вы можете видеть на картинке, PulseAudio позволяет использовать разные входы захвата для каждого программного обеспечения записи (в нашем случае для каждого модуля захвата ices2 Alsa).

PulseAudio configuration for streaming two different USB Dongles

Следовательно, нужно запускать ices2 дважды с одним отдельным файлом конфигурации каждый

Каждый лед2 должен определять новый источник импульсов alse:

    <input>
        <module>alsa</module>
        <param name="device">pulse</param>
        <!-- Read metadata (from stdin by default, or -->
        <!-- filename defined below (if the latter, only on SIGUSR1) -->
        <param name="metadata">1</param>
        <param name="metadatafilename">test</param>
    </input>

И два разных экземпляра

Например, для первого льда2

<instance>
        <!--    Server details.

            You define hostname and port for the server here, along
            with the source password and mountpoint.  -->

        <hostname>localhost</hostname>
        <port>4888</port>
        <username>source</username>
        <password>pasword</password>
        <mount>/radio1.ogg</mount>

</instance>

для second ices2

<instance>
        <!--    Server details.

            You define hostname and port for the server here, along
            with the source password and mountpoint.  -->

        <hostname>localhost</hostname>
        <port>4888</port>
        <username>source</username>
        <password>pasword</password>
        <mount>/radio2.ogg</mount>


</instance>
0
29.05.2018, 11:22
3 ответа

El siguiente script une con la línea anterior cualquier línea que no comience con 2 números:

$ awk -v ORS="" '$1~/^[0-9]+$/ && $2~/^[0-9]+$/ && NR>1{printf "\n"}1' file
1234  1234  dei_1/3,dei_2/3,dei_9/0,dei_10/0,dei_8/4
2345  2345  dei_8/9,dei_5/6,dei_4/9
4244  4244  dei_0/9,dei_4/6,dei_4/1
4235  4235  dei_0/9,dei_4/6,dei_4/,dei_9/7,dei_1/3,dei_2/3,dei_9/0

Esto se basa enORS(separador de registro de salida )que se restablece a una cadena vacía. La nueva línea se agrega si los 2 primeros campos son números (y si no es la primera línea ).

1
28.01.2020, 02:31

Aproximación cortased:

sed -E 'N; s/\n([^[:space:]]*,[^[:space:]]+)/\1/' file

La salida:

1234  1234  dei_1/3,dei_2/3,dei_9/0,dei_10/0,dei_8/4
2345  2345  dei_8/9,dei_5/6,dei_4/9
4244  4244  dei_0/9,dei_4/6,dei_4/1
4235  4235  dei_0/9,dei_4/6,dei_4/,dei_9/7,dei_1/3,dei_2/3,dei_9/0
1
28.01.2020, 02:31

Un par de enfoques extraños:

Almacena la línea más reciente que comienza con un dígito, agrégala si la línea actual no comienza con un dígito

awk '
    /^[[:digit:]]/ {if (prev) print prev; prev=$0; next} 
    {prev = prev $0} 
    END {if (prev) print prev}
' file

Invierta el archivo. Si una línea comienza con un dígito que no sea -, lea la línea siguiente y agregue la línea anterior. Invertir los resultados. Supongo que un registro se divide como máximo 1 vez

tac file | awk '/^[^[:digit:]]/ {this = $0; getline; $0 = $0 this} 1' | tac
0
28.01.2020, 02:31

Теги

Похожие вопросы