sirve scripts script que programas pasar parametros para operaciones manejo español ejemplos comandos cadenas aritmeticas bash sed mailx

que - scripts bash ejemplos



Leer líneas de File in Bash y analizar palabras en variables para los parámetros de mailx (2)

Tengo un script bash que lee líneas de un archivo de texto con 4 columnas (sin encabezados). El número de líneas puede ser como máximo de 4 líneas o menos. Las palabras en cada línea están separadas por el carácter ESPACIO.

[email protected] [email protected];[email protected] Sub1 MailBody1 [email protected] [email protected];[email protected] Sub2 MailBody2 [email protected] [email protected];[email protected] Sub3 MailBody3 [email protected] [email protected];[email protected] Sub4 MailBody4

Actualmente, estoy analizando el archivo y después de obtener cada línea, estoy almacenando cada palabra en cada línea en una variable y llamando a mailx cuatro veces. Se pregunta si hay una solución elegante awk / sed a la lógica mencionada a continuación.

  • encontrar el número total de líneas
  • mientras read $line , almacena cada línea en una variable
  • analizar cada línea como i=( $line1 ) , j=( $line2 ) etc.
  • Obtenga valores de cada línea como ${i[0]} , ${i[1]} , ${i[2]} y ${i[3]} etc.
  • llame a mailx -s ${i[2]} -t ${i[1]} -r ${i[0]} < ${i[3]}
  • analizar la siguiente línea y llamar a mailx
  • haz esto hasta que no se hayan alcanzado más líneas o un máximo de 4 líneas

¿Awk o sed proporcionan una solución elegante a la lógica de iteración / bucle anterior?


Dale una oportunidad:

head -n 4 mail.txt | while read from to subject body; do mailx -s "$subject" -t "$to" -r "$from" <<< "$body" done

  • head -n 4 lee hasta cuatro líneas de su archivo de texto.
  • read puede leer múltiples variables de una línea, por lo que podemos usar variables con nombre para la legibilidad.
  • <<< es probablemente lo que quieres para la redirección, en lugar de < . Probablemente.

El ciclo while anterior funciona bien como una alternativa simple a sed y awk si tienes mucho control sobre cómo mostrar las líneas de texto en un archivo. el comando de lectura también puede usar un delimitador específico, usando el indicador -d.

Otro ejemplo simple:

Había usado mysql para obtener una lista de usuarios y hosts, colocándola en un archivo / tmp / userlist con texto como se muestra:

user1 host1 user2 host2 user3 host3

Pasé estas variables a un comando mysql para obtener información de concesión para estos usuarios y hosts y anexar a / tmp / grantlist:

cat /tmp/userlist | while read user hostname; do echo -e "/n/nGrabbing user $user for host $hostname..." mysql -u root -h "localhost" -e "SHOW GRANTS FOR ''$user''@$hostname" >> /tmp/grantlist done