リストファイルから配列の作成

まず、以下の形式のリストファイルがあります。 

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 とともに実行すると、以下のような出力が得られます。

f:id:S_E_Hyphen:20210502164027p:plain