我们可以在 AWK 中使用 shell 变量,例如 $VAR
来代替 $1
、$2
吗?例如:
UL=(AKHIL:AKHIL_NEW,SWATHI:SWATHI_NEW)
NUSR=`echo ${UL[*]}|awk -F, '{print NF}'`
echo $NUSR
echo ${UL[*]}|awk -F, '{print $NUSR}'
实际上,我是一名 Oracle DBA,我们收到很多导入请求。我正在尝试使用脚本使其自动化。该脚本将找出转储中的用户,并提示需要加载转储的用户。
假设转储有两个用户AKHIL
、SWATHI
(转储中可能有很多用户,我想导入更多数量的用户)。我想将转储导入到新用户 AKHIL_NEW
和 SWATHI_NEW
。因此要读取的输入类似于 AKHIL:AKHIL_NEW,SWATHI:SWATHI_NEW
。
首先,我需要找到要创建的用户数,然后我需要从我们提供的输入中获取新用户,即 AKHIL_NEW,SWATHI_NEW
。这样我就可以连接到数据库并创建新用户,然后导入。我没有复制整个代码:我只是从接受输入用户的位置复制代码。
UL=(AKHIL:AKHIL_NEW,SWATHI:SWATHI_NEW) ## it can be many users like USER1:USER1_NEW,USER2_USER2_NEW,USER3:USER_NEW..
NUSR=`echo ${UL[*]}|awk -F, '{print NF}'` #finding number of fields or users
y=1
while [ $y -le $NUSR ] ; do
USER=`echo ${UL[*]}|awk -F, -v NUSR=$y '{print $NUSR}' |awk -F: '{print $2}'` #getting Users to created AKHIL_NEW and SWATHI_NEW and passing to SQLPLUS
if [[ $USER = SCPO* ]]; then
TBS=SCPODATA
else
if [[ $USER = WWF* ]]; then
TBS=WWFDATA
else
if [[ $USER = STSC* ]]; then
TBS=SCPODATA
else
if [[ $USER = CSM* ]]; then
TBS=CSMDATA
else
if [[ $USER = TMM* ]]; then
TBS=TMDATA
else
if [[ $USER = IGP* ]]; then
TBS=IGPDATA
fi
fi
fi
fi
fi
fi
sqlplus -s '/ as sysdba' <<EOF # CREATING the USERS in the database
CREATE USER $USER IDENTIFIED BY $USER DEFAULT TABLESPACE $TBS TEMPORARY TABLESPACE TEMP QUOTA 0K on SYSTEM QUOTA UNLIMITED ON $TBS;
GRANT
CONNECT,
CREATE TABLE,
CREATE VIEW,
CREATE SYNONYM,
CREATE SEQUENCE,
CREATE DATABASE LINK,
RESOURCE,
SELECT_CATALOG_ROLE
to $USER;
EOF
y=`expr $y + 1`
done
impdp sysem/manager DIRECTORY=DATA_PUMP DUMPFILE=imp.dp logfile=impdp.log SCHEMAS=AKHIL,SWATHI REMPA_SCHEMA=${UL[*]}
在最后一个 impdp 命令中,我需要使用变量获取转储中的原始用户,即 AKHIL、SWATHI。
最佳答案
是的,您可以在 awk 中使用 shell 变量。有很多方法可以做到这一点,但我最喜欢的是使用 -v
标志定义变量:
$ echo | awk -v my_var=4 '{print "My var is " my_var}'
My var is 4
只需将环境变量作为参数传递给 -v
标志即可。例如,如果您有以下变量:
$ VAR=3
$ echo $VAR
3
这样使用:
$ echo | awk -v env_var="$VAR" '{print "The value of VAR is " env_var}'
The value of VAR is 3
当然,您可以提供相同的名称,但 $
不是必需的:
$ echo | awk -v VAR="$VAR" '{print "The value of VAR is " VAR}'
The value of VAR is 3
关于 awk 中 $
的注释:与 bash、Perl、PHP 等不同,它不是变量名称的一部分,而是 an operator .
关于awk - 我们可以在 awk 中使用 shell 变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15786777/