Сохранение только части вывода в переменную оболочки - PullRequest
1 голос
/ 06 ноября 2019

привет, я использую скрипт 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:

1 Ответ

1 голос
/ 06 ноября 2019

Вы можете направить свой вывод в этот awk:

your_cmd | awk '/^TAB_NAME$/{n=NR} n && NR==n+3{print; exit}'

TEST1

Этот awk ищет строку, равную TAB_NAMES, и сохраняет эту строку нет,После чего он печатает строку, чья строка no равна stored no + 3.

. Чтобы сохранить это показанное значение в переменной, используйте:

myvar=$(your_cmd | awk '/^TAB_NAME$/{n=NR} n && NR==n+3{print; exit}')
...