Cómo cortar columnas con diferentes límites [Solucionado]

Imagen de PabliNet
0 puntos

Necesito cortar la información con dos límites distintos, o sea, tengo que cortar entre los dos puntos (;) y un espacio.
Acá dejo lo que tengo que cortar:

volume:100%   repeat: off   random: off   single: off   consume: on

El problema es que, si bajo el volumen, queda un espacio entre el volumen y el porcentaje.

volume: 90%   repeat: off   random: off   single: off   consume: on

Entonces me cambia los números de columnas.
Lo que quiero hacer es guardar el estado de single y consume en MPD.

Imagen de .doc
+1
0
-1

... porque pienso que el éxito en recibir respuestas para resolver un problema es directamente proporcional a la claridad de la pregunta formulada. Que depende no de cómo se entiende (a si mismo) quien pregunta, sino de cómo lo entienden los que lo leen.
Y yo, francamente, no he entendido nada.

+1
0
-1
Imagen de PabliNet
+1
0
-1

En el comando mpc aparecen diez columnas separas por espacios si el volume está menor del 100%.

1.- volume:
2.- 90%
3.- repeat:
4.- off
5.- random:
6.- off
7.- single:
8.- Off
9.- consume:
10.- on
Si el volumen está en 100%, las columnas serían:
1.- volume:100%
2.- repeat:
3.- off
4.- random:
5.- off
6.- single:
7.- off
8.- consume:
9.- on

Entonces si está o no el volumen 100%, varía el número de cada columna.
El problema que tengo es, que cuando quiero hacer el AWK me varía el número de las columnas.

+1
0
-1

"No hay nada más hermoso que hacer algo por alguien,
y no hay nada más tonto que no hacer nada por nadie".
León Gieco®

Veni veni canta conmigo
que un amigo vas a encontrar,
que de la mano de Google
tus problemas vas a solucionar.

Imagen de PabliNet
+1
+1
-1

Le encontré la solución, pero distinta en Debian y en Kubuntu.

En Debian:

                case $1 in;
                        'single'|'consume')
                        case $1 in
                                'single') let col=7 ;;
                                'consume') let col=9 ;;
                        esac
                        let aux=`amixer get Master | awk -F'[]%[]' '/%/ {if ($7 == "off") {print "0" } else {print $2}}'`
                        [ $aux -lt 100 ] && let col=$((col+1))
                        case `mpc | wc -l` in
                                1) mpc | awk '{print $'$col'}' ;;
                                3) mpc | cat -n | grep ^'     3' | awk '{print $'$((col+1))'}'
                        ;; esac

En Kubuntu

                case $1 in
                        'single'|'consume')
                        case $1 in
                                'single') let col=8 ;;
                                'consume') let col=10 ;;
                        esac
                        aux=$(mpc | awk '{print $10}')
                        [ -z $aux ] || let col++
                        case `mpc | wc -l` in
                                1) mpc | awk '{print $'$((col-1))'}' ;;
                                3) mpc | cat -n | grep ^'     3' | awk '{print $'$col'}'
                ;; esac
+1
+1
-1

"No hay nada más hermoso que hacer algo por alguien,
y no hay nada más tonto que no hacer nada por nadie".
León Gieco®

Veni veni canta conmigo
que un amigo vas a encontrar,
que de la mano de Google
tus problemas vas a solucionar.

Imagen de pwned
+1
0
-1

Y por que no haces que la cadena quede igual, si el problema es que se abre un espacio pasalo por un:

string_estandar="`echo $string | sed 's/\:\s/\:/g'`"

Así siempre te quedará una string:

volume:100% repeat:off random:off single:off consume:on
volume:90% repeat:off random:off single:off consume:on

Luego ya aplicas una solución valida para ambas. Te diría algo más, pero es que aún sigo sin entender bien lo que quieres hacer xD, por que cuando pones la segunda explicación dices 10 columnas y yo veo una fila numerada... No entiendo nada, perdona sera mi culpa.

+1
0
-1