Читайте из text1 и запишите в text2

Я являюсь новым для окружения сценариев.

Я хотел бы записать сценарий, чтобы читать из text1 файла и получить значение из этого файла.

Это - содержание текстового файла:

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

Я хочу получить первое значение от строки с L_International_node-globe и формат это значение, чтобы плавать, и записать новое значение для отправки текстовых сообщений file2

В этом примере вывод должен быть значением '115911592756,879990', и это значение должно быть сохранено в другом текстовом файле.

Что Вы думаете об этом коде:

#!/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

Этот сценарий должен выполняться каждые 5 минут, поэтому что Вы думаете об использовании ресурса?

2
задан 16 April 2018 в 11:56

2 ответа

При принятии "плавающей точкой" Вы имеете в виду [-]d.ddde±dd "экспоненциальное представление" Вы могли использовать awk

awk '/L_International_node-globe/ {printf("%e\n", $2)}' text1 > text2

Можно использовать спецификатор %g если Вы хотите, чтобы формат изменился между %f и %e в зависимости от размера экспоненты.

2
ответ дан 2 December 2019 в 02:13

Исходный ответ

Следующая командная строка должна сделать то, что Вы хотите,

grep 'L_International_node-globe' text1|tr -s ' ' '\t'|cut -f 2 > text2
  • распечатайте строку с ключевым словом (и значение), Вы хотите из файла text1
  • преобразуйте разделение пространства во ВКЛАДКУ
  • распечатайте второе поле (первое поле после ключевого слова)
  • перенаправьте вывод в файл text2

Я не уверен, что Вы подразумеваете под плаванием. Оболочка распечатает символьную строку, и различные программы могут интерпретировать ее как число в формате плавающем.

Редактирование 1

Хорошо, Вы хотите запятую как десятичный разделитель. Это, покончили sed замена.

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

Редактирование 2

В ответ на Ваш предложенный сценарий оболочки я предлагаю следующую измененную версию,

#!/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

Примеры с данными из Вашего исходного вопроса,

$ ./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
2
ответ дан 2 December 2019 в 02:13

Другие вопросы по тегам:

Похожие вопросы: