首页 > 解决方案 > 从bash脚本中的变量中提取数字

问题描述

我有一个 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 shell 上运行它.. 工作正常,但如果我运行相同的命令,它不会输出任何东西。

所以我开始对它做一些 awk 这里 temp 是 128 NF_Est 是脚本的输出 echo "$NF_Est" | grep -w 128 | awk '{if ($1==128)print $0}' | tr -s " " | cut -d" " -f3

但如果我是多列中的“临时”值,这不起作用

任何我搞砸的建议(或)可以以更简单的方式完成?

标签: bashsh

解决方案


您可以使用grepcut提取信息:

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说明要提取哪些列。


推荐阅读