получить имена таблиц из файла с помощью сценария UNIX

У меня есть образец файла, как указано ниже. Это управляющий файл 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.

Пожалуйста посоветуй.

Спасибо, Арун


person Arun Antony    schedule 17.11.2010    source источник


Ответы (2)


Если синтаксис файла не меняется (имена таблиц начинаются с XX, а не XX_):

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

Измените ‹file_name› на имя файла.

person khachik    schedule 17.11.2010
comment
Не работает, я написал это так: #!/usr/bin/ksh clear echo Тестовые сценарии, выполняющие echo tnames=grep -o "TABLE XX[^ ].*_TAB" DATA_LOADER_CTL.ctl | sed 's/TABLE //g' for tn in $tnames; выполнить эхо $tn; done Это не дает никакого результата. - person Arun Antony; 17.11.2010
comment
echo tnames=... не назначает tnames. Удалить эхо. Кроме того, я написал это для sh (which sh). - person khachik; 17.11.2010

Вы не говорите, какая оболочка, но поскольку sh не поддерживает массивы, я предполагаю, что это Bash.

tables=($(sed -n '/TABLE /s/TABLE \(XX[^ ]*TAB\) *$/\1/p' inputfile))
for table in ${tables[@]}
do
    echo "$table"
done
person Dennis Williamson    schedule 17.11.2010
comment
Сработало.... #!/usr/bin/ksh clear echo Тестовые скрипты Запуск эхо-таблиц=($(sed -n '/TABLE /s/TABLE (XX[^ ]*TAB) *$/\1/ p' DATA_LOADER_CTL.ctl)) для таблицы в ${tables[@]} do echo $table done echo Done - person Arun Antony; 17.11.2010