[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Doublets cartes/sorties



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 :
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 des boucles
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,


Reply to: