2010-11-17 15 views
0

J'ai un exemple de fichier comme indiqué ci-dessous. Ceci est un fichier de contrôle du chargeur SQL:obtenir les noms de table à partir du fichier à l'aide du script UNIX

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 
) 

Je voudrais sélectionner un certain nombre de noms de table qui se produisent dans le fichier qui commencent par « XX_ » et se terminant par « _TAB » et le stocker dans un tableau en utilisant un Script UNIX.

Veuillez nous consulter.

Merci, Arun

Répondre

2

Si la syntaxe du fichier ne change pas (les noms de table commencent par XX, non XX_):

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

Modifier le <nom_fichier> au nom du fichier.

+0

ne fonctionne pas, je l'ai écrit comme ceci: #!/Usr/bin/ksh clair echo "Test Scripts en cours" écho tnames = 'grep -o « TABLEAU XX [^] . * _ TAB "DATA_LOADER_CTL.ctl | sed 's/TABLE // g'' pour tn dans $ tnames; fait echo $ tn; done Ceci donne mon numéro de sortie. – Arun

+0

'echo tnames = ...' n'attribue pas 'tnames'. Supprimer l'écho Aussi, je l'ai écrit pour 'sh' (' which sh'). – khachik

+0

son copain de travail! Grande aide. – Arun

0

Vous ne dites pas quel shell, mais puisque sh ne supporte pas les tableaux, je suppose que Bash.

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

Est-ce que travailler sur .... #!/Usr/bin/ksh clair echo "Test Scripts en cours" écho tables = ($ (Sed -n «/TABLE/s/TABLE \ (XX [ ^] * TAB \) * $/\ 1/p » DATA_LOADER_CTL.ctl)) pour table $ {tables [@]} faire echo "$ table" fait echo "Done" – Arun

+0

Cela a fonctionné aussi :) Bonne aide! – Arun