首页 > 解决方案 > 仅将部分输出存储到 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:

标签: linuxbashsh

解决方案


您可以将输出通过管道传输到此 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}')

推荐阅读