bash - 从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
但如果我是多列中的“临时”值,这不起作用
任何我搞砸的建议(或)可以以更简单的方式完成?
解决方案
您可以使用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
说明要提取哪些列。
推荐阅读
- python - 元组对象不是可调用问题。(简单鳕鱼)
- python - Scrapy在身份验证后抓取每个链接
- mysql - 如何针对数组在表中搜索json编码的数组列并返回匹配结果?
- java - 基于字符偏移的动态重新定位的字符阅读器(如 FileReader)
- javascript - JavaScript 日期元素显示为第二天而不是当天
- excel - 将数据从 excel 复制到现有的 powerpoint 图表
- javascript - 使用 .select jquery 但没有得到任何选定的文本
- javascript - HTML5 直接从 Safari iOS 上的照片库中选择照片
- python - Python中的df_dict
- kivy - 在 RecyleView kivy 中添加 KivyMD 扩展面板