Combinando dos líneas con BASH Scripts

Estoy usando vim para hacer un script simple que intenta obtener la salida de lm_sensors en otro archivo. Mi problema es que el formateo que debe realizarse requiere combinar dos líneas y convertirlas en un archivo. Esto es lo que tengo actualmente:

LINE1=(echo -en System: INFO $(date +%x) $(date +%T) : CPU Temperature \{ ; sensors| grep Core\ sed 's/        /, /g'|tr -d '\n')
LINE2=(echo -e \})
echo $LINE1$LINE2 >> (FILE PATH)

El único propósito de LINE2 es poner un corchete} al final de los datos, así que si hay una mejor manera de hacerlo todo en una línea, soy todo oídos.

Sin tener en cuenta los comandos sed y tr que formatean los datos, me gustaría que los datos de salida se vean de la siguiente manera, aunque siempre obtengo un 'token inesperado'; '' mensaje de error con el script anterior.

System: INFO (date time) : CPU Temperature { CPU Temp DATA }

Agradezco mucho todos los aportes.

preguntado el 16 de mayo de 11 a las 17:05

¿Por qué no pones la abrazadera en la cuerda directamente? ¿Por qué esta extraña indirecta a través de LINE2? -

He intentado ponerlo después del comando tr, aunque todo lo que hace es deshacerse de todos los datos entre los dos}. Por eso tuve que agregar LINE2. Si puede mostrarme la forma correcta de pegarlo al final para no tener que usar variables, problema resuelto. -

ponerlo en la línea con el echo? Es decir echo "$LINE1\}" >> (FILE PATH) o que me estoy perdiendo -

después de hacer eso todavía obtengo: syntax error near unexpected token ';' -

Es muy difícil publicar código en los comentarios. Mira mi respuesta. Podemos trabajar allí para intentar resolverlo. También sugiero que use una variable en lugar de (FILE PATH) por ahora, para que podamos estar seguros de la sintaxis correcta. -

2 Respuestas

Pruebe esto, tal vez:

LINE1=`echo -en System: INFO $(date +%x) $(date +%T) : CPU Temperature \{ ; sensors| grep Core\ sed 's/        /, /g'|tr -d '\n'`
echo "$LINE1\}" >> (FILE PATH)

Alternativamente:

(echo -en System: INFO $(date +%x) $(date +%T) : CPU Temperature \{ ; sensors| grep Core\ sed 's/        /, /g'|tr -d '\n')|while read line; do
   echo "$LINE1\}" >> (FILE PATH)
done

contestado el 16 de mayo de 11 a las 22:05

Usé tu primera opción y todo salió dorado. Al parecer, eran los paréntesis los que estaban arruinando todo. Realmente aprecio la ayuda, eres un salvavidas. - Dbonuccelli

@Dbonuccelli: Me alegro de haber podido ayudar. También usaste las comillas invertidas en los lugares equivocados, diría yo. Solo para tu información. - 0xC0000022L

Puede ser mucho más ordenado:

temp=$(sensors | awk '/Core/ {printf("%s%s", sep, $3); sep = ", "}'; echo "")
printf "System: INFO %s : CPU Temperature { %s }\n" "$(date "+%x %T")" "$temp"

contestado el 16 de mayo de 11 a las 23:05

Jeje, la belleza de Bash y Perl. Un problema y cien formas diferentes de resolverlo :) ... +1 de mí. - 0xC0000022L

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.