我有一个bash脚本,当我运行test.sh代码时,该脚本会在屏幕上为每个样本编号输出一些统计信息(如下所示的示例)。
我想做的是将输出存储在变量中并提取testNum的平均值-> 11和52
A=`./test.sh` # I have all the output in a variable A
现在我需要提取11的平均值-52的-128和-96 我正在尝试并思考如何做到这一点
有人可以帮我吗?
这是示例测试代码: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
这里的温度是128
NF_Est是脚本的输出
echo "$NF_Est" | grep -w 128 | awk '{if ($1==128)print $0}' | tr -s " " | cut -d" " -f3
但是如果我是多列中的“临时”值,这将不起作用
有什么建议可以解决我的问题吗?
答案 0 :(得分:1)
您可以使用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
指出要提取的列。
答案 1 :(得分:1)
您真的想要awk
:
$ ./test.sh | awk '$1==11{print $3}'
-128
$ ./test.sh | awk '$1==52{print $3}'
-96
如果您想从$A
中提取值而不是运行脚本,只需执行:echo "$A" | awk ...