Estaba buscando una forma de separar una cadena de caracteres en elementos como hace por ejemplo la funcion explode(patron, cadena) pero usando BASH. La idea es coger un fichero que contiene un diccionario de palabras y acceder a ellas desde un script a través de un indice, por ejemplo en PHP se haría:
$buffer=fread($fichero,filesize(“nombrefichero”));
$diccionario=explode(“\n”,$buffer);
Pero en BASH no parece que haya una funcion explode. Así que lo he hecho de la siguiente manera:
diccionario=(`cat diccionario.txt`)
con comillas inversas, y ha funcionado bien.
La cuestion es que he puesto esto en mi blog porque ultimamente he buscado algunas cosas en google y me ha salido una pagina en la que viene perfectamente descrito el problema pero para poder ver las soluciones tienes que pagar (no voy a decir que pagina es porque imagino que ya tendrán bastantes visitas).
Espero que esta entrada resulte util a mas gente, y si alguien conoce más trucos que los comente.
Sí, esa cosa funciona, pero no es portable en todos los shells (sólo bash). Es verdad que el shell (sh) estándar no tiene arrays, pero sin duda lo que pretendas hacer se puede hacer sin arrays
Saludos!
diego.
Muy bien. Así que quitandole de comer a esa página. Y también noto que calientas motores para escribir entradas en cierto lug.
pues… así a voz de pronto… se me ocurre hacer un
head -n $numeropalabra diccionario | tail -n 1
Eso es lo que usé para coger las lineas de salida del comando ‘sar’ y agruparlas para evaluar el rendimiento del servidor. De todas formas me temo que aunque el fichero esté en la cache de buffers una vez leido, este método resulta algo ineficiente y necesito al menos 100 palabras aleatorias por segundo.
${diccionario[$(($RANDOM % ${#diccionario[@]})) ]}