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 ?
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 ?
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 ?
Pierre ESTREM, on 2020-03-22 23:34:28 +0100: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 ?
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 %-sn", 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, on 2020-03-22 23:34:28 +0100:
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 ?
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 %-sn", 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, on 2020-03-22 23:34:28 +0100: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 ?
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 %-sn", 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,
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ï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ï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.
pacmd list-cards | awk '/^tname: <.*>$/{split($0,n,"^tname:
pacmd list-cards | awk '/^tname: <.*>$/{split($0,n,"^tname:
pacmd list-cards | awk '/^tname: <.*>$/{split($0,n,"^tname:
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 %-sn",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,
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 %-sn",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,
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 %-sn",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,
#!/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 $outp ut"
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 :)
#!/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 $outp ut"
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 :)
#!/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 $outp ut"
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 :)