別のテキストファイルのカウンタ

別のテキストファイルのカウンタ

フォルダの配置に基づいてファイルを処理するスクリプトがあり、一連の変数に基づいてフォルダを処理して処理する関数を作成しました。

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

関連情報