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,