En Bash, quiero obtener la enésima palabra de una cadena.Nth palabra en una cadena
Por ejemplo:
STRING="one two three four"
N=3
Resultado:
"three"
Lo Bash comando/script podría hacer esto?
En Bash, quiero obtener la enésima palabra de una cadena.Nth palabra en una cadena
Por ejemplo:
STRING="one two three four"
N=3
Resultado:
"three"
Lo Bash comando/script podría hacer esto?
echo $STRING | cut -d " " -f $N
Una alternativa
N=3
STRING="one two three four"
arr=($STRING)
echo ${arr[N-1]}
STRING=(one two three four)
echo "${STRING[n]}"
En tu ejemplo, ¿STRING es realmente una cadena? Parece una matriz. –
@NicolasRaoul Sí, en realidad tienes razón. Pero he escrito para ser una alternativa a. – mnrl
Usando awk
echo $STRING | awk -v N=$N '{print $N}'
prueba
% N=3
% STRING="one two three four"
% echo $STRING | awk -v N=$N '{print $N}'
three
+1 Esto funciona con un delimitador de espacio múltiple. – tidwall
Sin expen tenedores sive, sin tubos, sin bashisms:
$ set -- $STRING
$ eval echo \${$N}
three
Pero ten cuidado con globbing.
Usar bash arrays para esto es la "mejor" solución, odio usar awk o sed, ya que no los veo instalados en todas las configuraciones, especialmente en la configuración de msys. – Sundar
Aunque el eco "no es necesario", lo encontré útil para entender cómo usar los elementos arr. Gracias –
Si ha configurado 'IFS' (el separador de campo interno) en ':' o algo en lugar de espacio en blanco, cámbielo antes de intentar esto. – Noumenon