[英]How can I assign a string with quotes to a variable in bash, and use it as a pattern in awk?
[英]Can I import/use a bash function in awk?
我有一個相當大的bash函數庫,可以在應用程序中使用。 該庫將作為環境文件導入。 由於函數已導出,因此我可以在其他bash腳本中使用這些函數,而不會出現任何問題。
但是,還有另一個問題,我需要使用awk scriptlet,並且希望盡可能使用bash庫中的幾個函數。
簡而言之,我希望能夠執行以下兩項操作之一:
作品:
[root@test@Test1001 scripts]# . mfg.env
[root@test@Test1001 scripts]# set -o posix;OSMAJVER=12 EVMAJVER=11 EVMINVER=1 SYSTEM_ARCH=SSA HOST=test;check_flag RAD
[root@test@Test1001 scripts]# echo $?
0
不起作用:
[root@test@Test1001 scripts]# . mfg.env
[root@test@Test1001 scripts]# awk -v st=ssa -v 'env=OSMAJVER=12 EVMAJVER=11 EVMINVER=1 SYSTEM_ARCH=SSA HOST=test' -f /tmp/s1.awk /tmp/template.mf
bash: check_flag: No such file or directory 127
s1.awk
BEGIN {
FS=":"
if (system("set -o posix;"env)!=0) {
print "***ERROR - ENV string not valid to shell - cannot continue"
exit 1
}
}
/^[[:space:]]*#/{next}
/^[[:space:]]*$/{next}
{
# field 3 processing
n_a=split($3,a_st,",")
# field 4 re-glue around ":" if required
cmd=$4
for (i=5; i<=NF; i++) cmd=cmd":"$i
if (cmd) cmd="set -o posix;"env";"cmd
f=0;for (i=1; i<=n_a && !f; i++) if (a_st[i]==st) f=1
print "CMD: "cmd
if ($3=="" || $3=="*" || f)
system(cmd)
}
MF文件:
text:S3:rcs,ssa:check_flag RAD
我希望僅在“ check_flag RAD”返回true時才能處理上述行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.