linux - 仅将部分输出存储到 shell 变量中
问题描述
嗨,我正在使用 bash 脚本。在这里我执行这段代码。
/usr/bin/mxci <<EOF
SELECT substring(substring(tname from (1+locate('.',tname))),
(1+locate('.',substring(tname from (1+locate('.',tname))))),15 ) as TAB_NAME
FROM table(explain('/home/vivek/MFCABS1031VCAT.VSCH.A9B69395AE3238A4184A90CD1F28C161', '%'))
WHERE OPERATOR LIKE '%FILE_SCAN%';
EOF'
这将返回一个输出为
>>SELECT substring(substring(tname from (1+locate('.',tname))),
+>(1+locate('.',substring(tname from (1+locate('.',tname))))),15 ) as TAB_NAME
+>FROM table(explain('/home/vivek/MFCABS1031VCAT.VSCH.A9B69395AE3238A4184A90CD1F28C161', '%'))
+>WHERE OPERATOR LIKE '%FILE_SCAN%';
TAB_NAME
---------------
TEST1
--- 1 row(s) selected.
>>exit;
现在我知道如何将整个输出存储到单个变量中并打印它但是我无法弄清楚如何将部分信息存储到变量中。就像我只想将 TEST1 存储到变量中一样,我该怎么办。
提前致谢
变量测试的输出
/home/vivek: echo "$test"
Hewlett Packard Enterprise NonStop(TM) SQL/MX Conversational Interface 3.7
(c) Copyright 2003-2019 Hewlett Packard Enterprise Development LP.
>>SELECT substring(substring(tname from (1+locate('.',tname))),
+>(1+locate('.',substring(tname from (1+locate('.',tname))))),15 ) as TAB_NAME
+>FROM table(explain('/home/vivek/MFCABS1031VCAT.VSCH.A9B69395AE3238A4184A90CD1F28C161', '%'))
+>WHERE OPERATOR LIKE '%FILE_SCAN%';
TAB_NAME
---------------
TEST1
--- 1 row(s) selected.
>>exit;
End of MXCI Session
/home/vivek:
解决方案
您可以将输出通过管道传输到此 awk:
your_cmd | awk '/^TAB_NAME$/{n=NR} n && NR==n+3{print; exit}'
TEST1
这awk
将查找等于TAB_NAMES
并存储该行号的行。之后它打印一行,其行号为stored no + 3
。
要将此显示的值存储在变量中,请使用:
myvar=$(your_cmd | awk '/^TAB_NAME$/{n=NR} n && NR==n+3{print; exit}')
推荐阅读
- css - 基于多个值的 React Native Animated 插值不透明度
- ruby-on-rails - Ruby/Rails 4.2 - 如果 A && B 其中 B 条件取决于 Rails 环境
- mongodb - 在MongoDB中计算每5秒的移动平均值
- python - 开始处理异步任务,同时将它们添加到事件循环中
- python - pySerial 和 Arduino 通信
- github - GitHub 中的图像不适用于自述文件
- jquery - jquery:计算字符数,对某些标签进行不同的计数
- html - Chrome 将空格添加到
使用时的标记
- selenium - selenium c#等待使用元素名称而不是定位器(By.Id)
- python - 如何对数组进行批量计算