使用UNIX脚本从文件中获取表名

时间:2010-11-17 10:06:54

标签: shell unix ksh

我有一个示例文件,如下所示。这是一个SQL Loader控制文件:

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_”开头,以“_TAB”结尾,并使用 UNIX脚本将其存储到数组中。

请建议。

谢谢, 阿伦

2 个答案:

答案 0 :(得分:2)

如果文件语法没有改变(表名以XX开头,而不是XX_):

tnames=`grep -o "TABLE XX[^ ].*_TAB" <file_name> | sed 's/TABLE //g'`
for tn in $tnames; do echo $tn; done

更改&lt; file_name&gt;到文件的名称。

答案 1 :(得分:0)

你没有说哪个shell,但由于sh不支持数组我假设是Bash。

tables=($(sed -n '/TABLE /s/TABLE \(XX[^ ]*TAB\) *$/\1/p' inputfile))
for table in ${tables[@]}
do
    echo "$table"
done
相关问题