cerhu > linux.debian.user.french

Pierre ESTREM (23/03/2020, 00h40)
Bonsoir,

Je tente des tests de profiles de cartes son et j'ai besoin de les
stocker sous forme de tableau comme ceci :

carte1 sortie1
carte1 sortie2
carte1 sortie3
carte2 sortie1
carte2 sortie2
carte3 sortie1

Je fais ceci :

pacmd list-cards | sed -n 's/^\tname: <\(.*\)>$/\1/p;
s/^\t\+output:\([^:]\+\).*$/\1/p'

Ainsi je n'ai pas les paires "cartes/sorties" mais tout est en ligne...

Avec des boucles je ne m'en sors pas et j'ai une peur de awk.

Quelqu'en saurait-il faire cela ?

Merci !!!

pierre estrem
Étienne Mollier (23/03/2020, 21h50)
Pierre ESTREM, on 2020-03-22 23:34:28 +0100:
[..]
> Je fais ceci :
> pacmd list-cards | sed -n 's/^\tname: <\(.*\)>$//p;
> s/^\t\+output:\([^:]\+\).*$//p'
> Ainsi je n'ai pas les paires "cartes/sorties" mais tout est en ligne...
> Avec des boucles je ne m'en sors pas et j'ai une peur de awk.
> Quelqu'en saurait-il faire cela ?


Bonsoir,

Je suppose que c'est possible de faire plus simple. Mais avec
du code awk malheureusement j'ai ceci, qui m'a l'air de produire
une sortie comme vous semblez espérer l'obtenir :

pacmd list-cards \
| awk '
/^\tname: <.*>$/ {
split($0, name, "<|>");
}
/^\t+output:/ {
split($0, output, ":");
printf "%-31s %-s\n", name[2], output[2]
}'

Le premier match enregistre le nom de la carte dans le second
champ deux du tableau name. Le second match extrait chaque
sorties son dans le champ deux du tableau output, puis affiche
ladite sortie, préfixée du nom de la carte. Ça devrait bien
marcher tant que "name:" apparait en premier, et que le nom de
la carte ne contient pas de chevrons.

Amicalement,
Pierre ESTREM (23/03/2020, 23h20)
Bonsoir Etienne et le monde libre...

Aïe, il y a des chevrons qui encadrent le nom des cartes.
J'ai des erreurs avec ton code, mais je vous remercie de votre
participation.

J'ai une horreur de 'awk' (c'est ma faute).
J'ai avancé avec la solution sed mais je dois passer ensuite par des
boucles for.

A suivre

pierre estrem

Le 23/03/2020 à 20:46, Étienne Mollier a écrit :
[..]
Étienne Mollier (24/03/2020, 00h20)
Pierre ESTREM, on 2020-03-23 22:15:20 +0100:
> Aïe, il y a des chevrons qui encadrent le nom des cartes.
> J'ai des erreurs avec ton code, mais je vous remercie de votre
> participation.


Quelles erreurs se produisent exactement ?
Et sur quelle version de Debian ?

J'ai vérifié avec ma configuration de cartes son et j'obtiens la
sortie suivante chez moi, indépendemment de l'implémentation de
Awk (mawk vs gawk vs busybox) :

alsa_card.pci-0000_01_00.1 hdmi-stereo
alsa_card.pci-0000_00_14.2 analog-stereo
alsa_card.pci-0000_00_14.2 analog-stereo+input
alsa_card.pci-0000_00_14.2 analog-surround-21
alsa_card.pci-0000_00_14.2 analog-surround-21+input
alsa_card.pci-0000_00_14.2 analog-surround-40
alsa_card.pci-0000_00_14.2 analog-surround-40+input
alsa_card.pci-0000_00_14.2 analog-surround-41
alsa_card.pci-0000_00_14.2 analog-surround-41+input
alsa_card.pci-0000_00_14.2 analog-surround-50
alsa_card.pci-0000_00_14.2 analog-surround-50+input
alsa_card.pci-0000_00_14.2 analog-surround-51
alsa_card.pci-0000_00_14.2 analog-surround-51+input
alsa_card.pci-0000_00_14.2 analog-surround-71
alsa_card.pci-0000_00_14.2 analog-surround-71+input
alsa_card.pci-0000_00_14.2 iec958-stereo
alsa_card.pci-0000_00_14.2 iec958-stereo+input
alsa_card.pci-0000_00_14.2 iec958-ac3-surround-51
alsa_card.pci-0000_00_14.2 iec958-ac3-surround-51+input
alsa_card.platform-pcspkr mono-fallback
alsa_card.platform-pcspkr multichannel-output

Mais peut-être que j'ai mal compris le problème ? Avec une
correction mineure sur le premier split pour régler une bonne
fois pour toute cette histoire de chevrons, et en mode « one
liner épique », je propose :

pacmd list-cards | awk '/^\tname: <.*>$/{split($0,n,"^\tname: <|>$");}/^\t+output:/{split($0,o,":");printf "%-31s %-s\n",n[2],o[2]}'

Peut-être que j'ai eu la mauvaise idée de tester sur Sid, et que
les autres versions de Debian se comportent différement ?

> J'ai une horreur de 'awk' (c'est ma faute).
> J'ai avancé avec la solution sed mais je dois passer ensuite par desboucles
> for.


J'ai du mal à me représenter de solution simple en sed ou en
shell ; mais j'imagine que c'est possible. Si vous y parvenez,
alors je serais curieux de la voir. N'hésitez pas à la poster !

Amicalement,
Pierre ESTREM (24/03/2020, 03h20)
Bonsoir,

> pacmd list-cards | awk '/^\tname: <.*>$/{split($0,n,"^\tname: <|>$");}/^\t+output:/{split($0,o,":");printf "%-31s %-s\n",n[2],o[2]}'


J'utilise une base Debian Jessie et très exactement AccessDV Linux
puisque je suis DV (déficient visuel).

Le code dessus fonctionne et me renvoie un beau tableau.
Je dois creuser car il me semble qu'il manque 1 ou 2 sorties.

Ca renvoie :

alsa_card.pci-0000_00_03.0      hdmi-stereo
alsa_card.pci-0000_00_03.0      hdmi-surround
alsa_card.pci-0000_00_03.0      hdmi-stereo-extra1
alsa_card.pci-0000_00_03.0      hdmi-surround-extra1
alsa_card.pci-0000_00_03.0      hdmi-stereo-extra2
alsa_card.pci-0000_00_03.0      hdmi-surround-extra2
alsa_card.pci-0000_00_1b.0      analog-stereo
alsa_card.pci-0000_00_1b.0      analog-stereo+input

J'ai progressé dans mon code sed et for ; je posterai !

Merci
pierre estrem
Pierre ESTREM (24/03/2020, 05h30)
Bonsoir,

C'est OK avec sed et 2 for :

#!/bin/bash

tab=(`pacmd list-cards | sed -n 's/^\tname: <\(.*\)>$/\1/p;
s/^\t\+output:\([^:]\+\).*$/    \1/p'`)

#### Nombre d'éléments du tableau tab
Dim=${#tab[@]}

#### Première boucle cherchant le nom d'une carte
for ((i=0; i<$Dim ; i++))
do
    #### Nom de la carte
    card=${tab[i]}
    #### Deuxième boucle cherchant les sorties de la carte
    for ((j=$[i+1] ; j<$Dim ; j++))
    do
    if [ ! "`echo ${tab[j]} | grep '_card.'`" ]; then
        output="${tab[j]}"
        echo "$card    $output"
    else break;
    fi
    done
    i=j
done

Votre code renvoie le même tableau ; je n'ai que 8 sorties alors qu'il
m'avait semblé en avoir 1 ou 2 de plus.
Les résultats sont identiques.

Je peux attaquer le test des profiles.

Merci pour votre aide :)

pierre estrem

Le 23/03/2020 à 23:19, Étienne Mollier a écrit :
[..]
Étienne Mollier (24/03/2020, 23h20)
Pierre ESTREM, on 2020-03-24 04:23:52 +0100:
[..]
>     for ((j=$[i+1] ; j<$Dim ; j++))
>     do
>     if [ ! "`echo ${tab[j]} | grep '_card.'`" ]; then
>         output="${tab[j]}"
>         echo "$card    $output"
>     else break;
>     fi
>     done
>     i=j
> done


Bonsoir,

Merci pour le script. Je me suis permis de le relire.
Peut-être que ce n'est qu'une erreur de transcription,
mais pour avoir la même sortie, j'ai dû remplacer votre i=j
à l'avant dernière ligne, par i=$[j-1]

> Votre code renvoie le même tableau ; je n'ai que 8 sorties alors qu'il
> m'avait semblé en avoir 1 ou 2 de plus.


Sans la correction, votre script me sort deux lignes de moins.
C'est peut-être l'origine de la confusion ?

> Les résultats sont identiques.
> Je peux attaquer le test des profiles.
> Merci pour votre aide :)


Ravi d'avoir pu vous aider :)
Amicalement,
Discussions similaires
[69] Donne Syquest ezflyer 230, HP Deskjet 550, cartes reseau 100Mb pci, cartes vidéo agp/pci, cartes scsi, cartes son, serveur bi-P3, word 95 et works 95, msdos , windows 95

[ECH] Cartes son ISA 16 bits, cartes 3DFX et diverses cartes PCI

legislation ! cartes electroniques/ cartes papier .

compatibilité cartes mère et cartes graphiques


Fuseau horaire GMT +2. Il est actuellement 07h58. | Privacy Policy