Извлечение чисел из переменной в скрипте bash - PullRequest
0 голосов
/ 10 июля 2019

У меня есть скрипт bash, который выводит некоторую статистику на экран для каждого номера образца (пример показан ниже), когда я запускаю код test.sh.

Я пытаюсь сохранить вывод в переменной и извлечь среднее значение для testNum -> 11 и 52

A=`./test.sh`    # I have all the output in a variable A 

Теперь мне нужно извлечьсреднее значение 11, которое составляет -128 и -96 для 52 Я пытаюсь и думаю, как я могу это сделать

Может кто-нибудь помочь мне в этом, пожалуйста?

Это пример тестового кода: test.sh

#!/bin/sh
echo Valid Numbers per States:3G phones
echo testNum        N_States         Mean Value 
echo    1       10              -128 
echo    2       10      -95 
echo    3       10      -94 
echo    4       10      -94 
echo    5       10      -94 
echo    6       10      -128    
echo    7       10      -91 
echo    8       10      -94 
echo    9       10      -94     
echo    10      10      -94 
echo    11      10      -128    
echo --------------------------------------------   
echo Valid Numbers per States :4G phones        
echo testNum        N_States         Mean Value         
echo    36      10      -95 
echo    40      10      -95 
echo    44      10      -95 
echo    48      10      -95
echo    52      10      -96
echo    56      10      -95
echo    60      10      -96
echo    64      10      -96
echo    100             10      -99
echo    104             10      -97
echo    108             10      -98
echo    112             9       -98
echo    116             9       -98
echo    120             9       -99
echo    124             9       -98 
echo    128             9       -98             
echo    132             9       -98             
echo    136             9       -99             
echo    140             9       -99             
echo    144             9       -99             
echo    149             9       -98             
echo    153             9       -99 
echo    157             9       -99
echo    161             9       -99
echo    165             9       -98
echo --------------------------------------------



Я использовал команды echo "$x" | grep -w '^52' | cut -d' ' -f3

Но Linux на моем проприетарном оборудовании не позволяет ^ (не уверен, его версия или что-то в этом роде) .. Яможет запустить это на любой оболочке bash .. работает нормально, но если я запускаю ту же команду, она ничего не выводит.

Итак, я начал делать несколько awk для этого. Здесь temp 128 NF_Est - это вывод скрипта echo "$NF_Est" | grep -w 128 | awk '{if ($1==128)print $0}' | tr -s " " | cut -d" " -f3

Но это не работает, если я являюсь "временными" значениями в нескольких столбцах

Любые предложения, где я облажался (или), это может быть сделано намного более простым способом?

Ответы [ 2 ]

1 голос
/ 12 июля 2019

Вы действительно хотите awk для этого:

$ ./test.sh | awk '$1==11{print $3}'
-128
$ ./test.sh | awk '$1==52{print $3}'
-96

Если вы хотите извлечь значение из $A вместо запуска сценария, просто выполните: echo "$A" | awk ...

1 голос
/ 10 июля 2019

Вы можете использовать grep и cut для извлечения информации:

echo "$x" | grep -w '^11' | cut -d' ' -f3
echo "$x" | grep -w '^52' | cut -d' ' -f3

grep фильтрует входные данные, выводя только те строки, которые соответствуют заданному шаблону. ^ соответствует началу строки. -w означает «соответствовать целым словам», без него он также выведет строки 11 2 и 11 6.

cut извлекает столбцы из своего ввода. -d указывает разделитель, в данном случае пробел, а -f указывает, какие столбцы извлечь.

...