2 votos

Leer de text1 y text2 escribir

Soy nuevo shell scripting.

Me gustaría escribir un guión para leer de texto1 archivo y obtener un valor de este archivo.

Este es el contenido del archivo de texto:

L_T4000-Level3-Ouerdia  6679088203.600000   1523.208000
L_T4000-Level3-Ouerdiaa 8230141220.800000   1526.263200
L_T4000-nodeATI_Wardiaa 444039671.536000    4091589798.080000
L_T4000-node_TIS    6663189651.680000   2080241494.000000
L_T4000-node_TISa   6636796103.440000   2044580242.080000
L_International_node-globe  115911592756.879990 22433604426.723553
L_CRS_X-node06788   4801933455.200000   1329.232178
L_CRS_X-node06852   7100165206.800000   1630.996089
L_CRS_X-node06852a  7841650889.760000   1176446198.640000

Quiero obtener el primer valor de la línea de con L_International_node-globe y el formato de este valor para flotar, y escribir el nuevo valor a texto archivo2

En este ejemplo, la salida debe ser el valor de la "115911592756,879990' y este valor debe ser almacenado en otro archivo de texto.

¿Qué piensas acerca de este código:

#!/bin/bash

text1="/path/to/filename1"
text2="/path/to/filename2"
var=0
grep 'L_International_node-globe' text1|tr -s ' ' '\t'|cut -f 2 | sed 's/\./,/' > $var
$var=$var/1000000000        #the result should be in Gigabits
echo $var > text2           #on every execution text2 should have a new value

Este script debe ser ejecutado cada 5 minutos, así que ¿qué piensa usted acerca de la utilización de los recursos?

2voto

steeldriver Puntos 19092

Suponiendo que por "punto flotante" significa "notación científica" se puede utilizar

Usted puede utilizar el especificador de si quieres el formato para cambiar entre y `` dependiendo del tamaño del exponente.

2voto

Rufo Puntos 121

Respuesta Original

La siguiente línea de comandos debe hacer lo que quieras,

grep 'L_International_node-globe' text1|tr -s ' ' '\t'|cut -f 2 > text2
  • impresión de la línea con la palabra clave y el valor que desee en el archivo text1
  • convertir el espacio de la separación a la FICHA
  • imprimir el segundo campo (primer campo después de la palabra clave)
  • la redirección de la salida para el archivo text2

No estoy seguro de lo que quieres decir con flotador. El shell para que se imprima la cadena de caracteres, y los diversos programas pueden interpretar como un número en formato float.

Edición 1

OK, quieres una coma como separador decimal. Que se hace con sed de sustitución.

grep 'L_International_node-globe' text1|tr -s ' ' '\t'|cut -f 2 | sed 's/\./,/' > text2

Edit 2

En respuesta a su sugirió shellscript sugiero la siguiente versión modificada,

#!/bin/bash

if [ $# -ne 2 ]
then
 echo "
 Usage:    $0 <path/infile> <path/outfile>
 Example:  $0 text1 text2"
 exit
fi

# extracting the value

var=$(grep 'L_International_node-globe' "$1"|tr -s ' ' '\t'|cut -f 2)

echo "debug1: $var"

# install and use 'bc'
# calculation; 'scale' sets the number of decimals in the output (truncated)

var=$(echo "scale=3
$var/1000000000" | bc)  #the result should be in Gigabits

echo "debug2: $var"

# conversion to comma as decimal separator

var=${var/./,}

echo "debug3: $var"

echo "$var" > "$2"   # after every execution the output file should have a new value

Ejemplos con los datos de tu pregunta original,

$ ./scriptname 

 Usage:    ./scriptname <path/infile> <path/outfile>
 Example:  ./scriptname text1 text2

$ ./script-name text1 text2 ; echo '-----------';cat text2
debug1: 115911592756.879990
debug2: 115.911
debug3: 115,911
-----------
115,911

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: