Lenguaje AWK, no entiendo porqué es $5 si sería $3

4 envíos / 0 nuevos
Último envío
#1 Vie, 22/09/2017 - 23:56
PabliNet
Imagen de PabliNet
Desconectado/a
se unió: 28/10/16

Lenguaje AWK, no entiendo porqué es $5 si sería $3

Estado: 
[SOLUCIONADO]

Estoy intentando saber porqué me sucede que AWK no me reconoce correctamente las columnas.

El comando sin filtros:

$ amixer get Master
Simple mixer control 'Master',0
  Capabilities: pvolume pswitch pswitch-joined
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 65536
  Mono:
  Front Left: Playback 30148 [46%] [on]
  Front Right: Playback 30148 [46%] [on]

Comando con filtros AWK:

Columna $1: Front
Columna $2: Left:
Columna $3: Playback
Columna $4: 30148
Columna $5: [46%]
Columna $6: [on]

Pero, si hago -F '[]%[]', la columna 5 se convierte en 2 y la 6 en 5.

Columna $1: "  Front Left: Playback 30148"
Columna $2: 46
Columna $5: on

$ amixer get Master | awk -F '[]%[]' '/Left:/ {print $2, $5}'
46 on

Mi pregunta es: ¿las columnas no tendrían que ser $2 y $3?

Sáb, 23/09/2017 - 02:48
PabliNet
Imagen de PabliNet
Desconectado/a
se unió: 28/10/16

Claro, ya me dí cuenta: después del % viene $3, después del ] es $4 y $5 después es después de [.

Sáb, 23/09/2017 - 05:27
Panko
Imagen de Panko
Desconectado/a
moderador
se unió: 18/02/16

Sin tener ni idea, solo mirando con awk -h veo que al usar

-F '[]%[]

tu mismo le estás cambiando el símbolo que le indica cuál es el "separador". De éste modo, hasta que no encuentra ese símbolo, no pasa al siguiente parámetro., si te fijas, te los toma todos como $1 hasta que llega al primer "[", que es el que toma como símbolo separador, y entonces el 46 pasa a ser el parámetro $2, porque está justo tras dicho símbolo.

  No hay bar que por bien no venga....
Sáb, 23/09/2017 - 16:23 (Responder a #3)
PabliNet
Imagen de PabliNet
Desconectado/a
se unió: 28/10/16

Panko wrote:

Sin tener ni idea, solo mirando con awk -h veo que al usar

-F '[]%[]

tu mismo le estás cambiando el símbolo que le indica cuál es el "separador". De éste modo, hasta que no encuentra ese símbolo, no pasa al siguiente parámetro., si te fijas, te los toma todos como $1 hasta que llega al primer "[", que es el que toma como símbolo separador, y entonces el 46 pasa a ser el parámetro $2, porque está justo tras dicho símbolo.

Claro, te explico, lo que hacen los corchetes cuando se declara los caracteres de separación es declarar varios caracteres. En este caso los separadores son: ] (cierre de corchete) %, (símbolo de porcentaje) y [ (apertura de corchete). También podés hacer: -F '[:;]' y en este caso los separadores serán los dos puntos y el punto y coma.