Shell 使用UNIX脚本从文件中获取表名
我有一个样本文件如下所示。这是一个SQL加载程序控制文件:Shell 使用UNIX脚本从文件中获取表名,shell,unix,ksh,Shell,Unix,Ksh,我有一个样本文件如下所示。这是一个SQL加载程序控制文件: LOAD DATA APPEND INTO TABLE XXWIN_TMP_LOADER_TAB ( seq POSITION(1:10) INTEGER EXTERNAL ,h_record POSITION(11:20) CHAR ,h_file_name POSITION(21:55) CHAR ) APPEND INTO TABLE XXWIN_SQL_LOADER_TAB ( seq
LOAD DATA
APPEND
INTO TABLE XXWIN_TMP_LOADER_TAB
( seq POSITION(1:10) INTEGER EXTERNAL
,h_record POSITION(11:20) CHAR
,h_file_name POSITION(21:55) CHAR
)
APPEND
INTO TABLE XXWIN_SQL_LOADER_TAB
( seq POSITION(1:10) INTEGER EXTERNAL
,h_record POSITION(11:20) CHAR
,h_file_name POSITION(21:55) CHAR
)
APPEND
INTO TABLE XXWIN_SQL_LOADER_TAB
( seq POSITION(1:10) INTEGER EXTERNAL
,h_record POSITION(11:20) CHAR
,h_file_name POSITION(21:55) CHAR
)
我想选择文件中出现的任意数量的表名,这些表名以“XX”开头,以“\u TAB”结尾,并使用UNIX脚本将其存储到数组中。
请给我一些建议
谢谢,
Arun如果文件语法没有改变(表名以
XX
开头,而不是XX
):
tnames=`grep-o“表XX[^]._TAB”| sed's/TABLE//g'`
对于tn,单位为$tnames;不要重复$tn;完成
将更改为文件名。您没有说是哪个shell,但是由于
sh
不支持数组,我假设是Bash
tables=($(sed -n '/TABLE /s/TABLE \(XX[^ ]*TAB\) *$/\1/p' inputfile))
for table in ${tables[@]}
do
echo "$table"
done
不工作,我这样写:#/usr/bin/ksh clear echo“测试脚本运行”echo tnames=
grep-o“表XX[^].*u TAB“数据加载程序”\u CTL.CTL | sed's/TABLE//g'
用于tn,单位为$tnames;不要重复$tn;完成此操作将不提供任何输出。echo tnames=…
不分配tnames
。去除回声。另外,我为sh
(哪个sh
)写的。确实有效/usr/bin/ksh clear echo“Test Scripts Running”echo tables=($(sed-n'/TABLE/s/TABLE(XX[^]*TAB)*$/\1/p'DATA_LOADER_CTL.CTL))用于${tables[@]}do echo“$TABLE”中的表
tables=($(sed -n '/TABLE /s/TABLE \(XX[^ ]*TAB\) *$/\1/p' inputfile))
for table in ${tables[@]}
do
echo "$table"
done