Как добавить столбец с числом или строкой, которая меняется каждый раз, когда находит число в другом столбце?

Я опубликую, что решило проблему для меня, что является лучшим ответом на этот вопрос здесь:

https://askubuntu.com/questions/398030/change-default-sound-device

Используя это и помощь, предоставленную дирктом , я предпринял следующие шаги::

pacmd list-cards-это дало моему X -Fi индекс 2.

Настройка профиля была фактически идентична настройке в ответе по ссылке выше, а именно 2 output:analog-stereo. Затем я ввел следующееpacmd set-card-profile 2 output:analog-stereo

Затем я добавил

set-card-profile 2  output:analog-stereo
set-default-sink 2

до конца/etc/pulse/default.pa

И при перезагрузке по-прежнему был выбран X -Fi, не нужно было вносить никаких изменений в Звук для повторного выбора карты.

1
20.09.2019, 11:57
2 ответа

Если вы не возражаете, используя числа вместо букв, вы можете сделать это очень легко в awk(fileимеет результат запуска sed -i 's/ */\t/g'на вашем примере данных, чтобы заменить все последовательные пробелы табуляцией, поскольку вы сказали, что ваш данные разделены табуляцией):

$ awk -F"\t" -vOFS="\t" '{if($1==1){num++}{print $0,"Replicate_"num}}' file 
1   x   x       Replicate_1
2   x   x       Replicate_1
3   x   x       Replicate_1
4   x   x       Replicate_1
1   x   x       Replicate_2
2   x   x       Replicate_2
3   x   x       Replicate_2
1   x   x       Replicate_3
2   x   x       Replicate_3
3   x   x   Replicate_3

Если вам нужны буквы, это немного сложнее, но не так уж плохо:

$ awk '{
        if(NR==FNR){
            a[++n]=$1
        }
        else{
            if($1==1){
                num++
            }
            print $0,"Replicate_"a[num]
        }
       }' <(printf '%s\n' {A..Z}) file
1   x   x    Replicate_A
2   x   x    Replicate_A
3   x   x    Replicate_A
4   x   x    Replicate_A
1   x   x    Replicate_B
2   x   x    Replicate_B
3   x   x    Replicate_B
1   x   x    Replicate_C
2   x   x    Replicate_C
3   x   x Replicate_C
1
27.01.2020, 23:22

Использование AWK с отдельным файлом со списком имен для добавления:

#!/usr/bin/awk -f

BEGIN { FS = "\t"; OFS = FS; idx = 0 }
FNR == NR { names[NR] = $0 }
FNR < NR && $1 == 1 { idx++ }
FNR < NR { $(NF + 1) = names[idx]; print }

Это настраивает AWK на использование табуляции в качестве разделителей полей для ввода и вывода. Предполагается, что первый файл содержит добавляемые имена; это читается в массив names. Когда мы переходим к файлам после первого, мы добавляем текущее имя в конец строки после проверки, равно ли первое поле 1, и увеличиваем индекс массива, если это так.

Без отдельного списка имен:

#!/usr/bin/awk -f

BEGIN { FS = "\t"; OFS = FS; idx = 0 }
$1 == 1 { idx++ }
{ $(NF + 1) = sprintf("Replicate_%c", 64 + idx); print }

В обоих случаях обработка ошибок отсутствует. В первом варианте, когда у вас закончатся имена, вместо них будет использоваться пустая строка. Во втором вы изучите набор символов после Z...

2
27.01.2020, 23:22

Теги

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