まず、以下の形式のリストファイルがあります。
OUTPUT file1 id 2783 id 3233 id 2794 id 160 id 254 id 3248 END OUTPUT file2 id 147 id 1100 id 668 id 2788 id 2796 END OUTPUT file3 id 669 id 2420 id 667 id 2795 END
OUTPUT行からEND行に挟まれたIDの数値を配列にして、OUTPUT行の引数とともに別のコマンドに渡すというスクリプトを作ります。
#/bin/bash #sdoc=\ #" list2id_array.sh \n"\ #" 標準入力から ID列を読み取り、id_a配列に満たします\n"\ #" 加えてcommandを呼び出し実行します\n\n"\ #" [option] \n"\ #" command= 実行させるコマンド \n"\ #"\n\n\n" #export sdoc command=`getparstr $# "$*" "command"` #if [ -z "$command" ] #then # usage;exit #fi declare -a id_a=();i=0
while read procedure object
do
case ${procedure} in
"OUTPUT"|"Output"|"output") output=${object};;
"ID"|"id") id_a[$((i++))]=${object};;
"END"|"end"|"End") . ${command}; declare -a id_a=();i=0;;
*);;
esac
done
END行を検出する度にコマンドを実行し、配列変数 ${id_a[]} を初期化しています。ちなみに $( ( i++ ) ) は "i before incremeent" です。$( ( ++i ) )で"i after incremeent" となるはずです。
#/bin/bash for id in ${id_a[*]} do echo ${output} ${id} done
という簡単な script_test.sh とともに実行すると、以下のような出力が得られます。