フォルダの配置に基づいてファイルを処理するスクリプトがあり、一連の変数に基づいてフォルダを処理して処理する関数を作成しました。
funtion filedetect {
//
<some processing code code>
//
}
folder=1
source="/dir_1/"
reciep="[email protected]"
filedetect
folder=2
source="/dir_2"
reciep="[email protected]"
filedetect
基本的に、各フォルダで見つかり、処理されたファイル数を数えるカウンタを含むテキストファイルを1つ生成するコードを追加したいと思います。そのため、テキストファイルに次の内容が含まれるように "folder"変数を追加しました。
FOLDER 1 = [count]
FOLDER 2 = [count]
etc.
しかし、これを行うには、以前の「count」を1行ずつ読み、count = count + 1に置き換える必要があります。
テキストファイルに基づいて正しい行を読み取るには?
答え1
あなたがこのようなことを始めたとしましょう。
folder1=10
folder2=4
folder3=7
次のコマンドを使用して作成できます。
set | grep -E '^folder[0-9]+=' > counter.txt
もう一度読むにはファイルをインポートします。
source counter.txt
bash
配列(、、)を処理するシェルがある場合は、zsh
フォルダセットをランダムに大きい数にインデックス付けできます。
folder[1]=10
folder[2]=4
folder[3]=7
この変数配列を作成してみてください。
set | grep '^folder=' > counter.txt
source
上記のようにread it backを使用してください。
echo "${folder[1]}"
配列の場合は、次のように参照できますforeach f "${folder[@]}"; do ... done
。インデックス値が厳密に1から昇順の場合は、次のようにすることもできます。
i=1
while [[ $i -le ${#folder[*]} ]]
do
echo "$i => ${folder[$i]}"
((i++))
done
答え2
次のようなYAML形式のファイルがあるとします。
folder1: 10
folder2: 20
folder3: 30
使用yq
できるhttps://kislyuk.github.io/yq/n
フォルダに関連付けられた数を1つ増やすには、次のコマンドを使用します。
yq -i -y --arg n 3 '.["folder"+$n] += 1' counts.txt
または、より説明的な長いオプションを使用してください。
yq --in-place --yaml-output --arg n 3 '.["folder"+$n] += 1' counts.txt
フォルダに関連する現在の数を取得するには、次の手順を実行しますn
。
yq --arg n 3 '.["folder"+$n]' counts.txt