構成ファイルから 1 つ以上の場所を取得し、各場所でいくつかのファイルを確認する必要があります。場所を見つけてテキストファイルからファイルのリストを読み取るAWKとSEDの組み合わせがあります。ファイルの各場所を確認したいので、bash 配列を使用して場所を保持することを考えました。
ただし、何らかの理由で、AWK ステートメントから配列を設定できません。完全なコンテンツを最初の要素にロードしているように見えます。
配列に手動でデータを入力すると、機能します。たとえば、行 array=$(awk ... を置き換えます
array[1]=/docs01/objdata/admin/p1dig
array[2]=/docs02/objdata/admin/p1dig
array[3]=/docs03/objdata/admin/p1dig
array[4]=/docs04/objdata/admin/p1dig
以下のコード スニペットでは、外側の (ファイル名) ループを削除し、デバッグ コンテキストを追加しています。
#!/bin/bash
declare -a array
OBJECTIVE_CONF=/u01/app/objective/perf/DOS1/config/objConf.xml
FILE=/tmp/DoS1_files.dsv
# IFS=$"/n"
array=$(awk '/<volume>/,/<\/volume>/' $OBJECTIVE_CONF | grep "<path>" | sed "s#<[/]*path>##g" | sed 's/^[ \t]*//' |sed 's/[ \t]*$//' )
element_count=${#array[@]}
echo "element_count is : $element_count "
echo "index is: $index"
echo "${array[$index]}"
echo "filename loop"
index=0
while [ "$index" -lt "$element_count" ]
do
let "index = $index + 1"
echo "index is: $index"
echo "ls ${array[$index]}/filename_from_loop"
done
echo "leaving loop"
Awk ステートメントをコマンド ラインから実行すると、期待どおりの結果が得られます。XML の開始タグと終了タグに対して AWK を実行し、その中で PATH に対して grep を実行し、SED を使用して PATH の exm タグと先頭およびトレーニング スペースを削除します。
bash-3.00$ awk '/<volume>/,/<\/volume>/' $OBJECTIVE_CONF | grep "<path>" | sed "s#<[/]*path>##g" | sed 's/^[ \t]*//' |sed 's/[ \t]*$//'
/docs01/objdata/admin/p1dig
/docs02/objdata/admin/p1dig
/docs03/objdata/admin/p1dig
/docs04/objdata/admin/p1dig