列を繰り返し、値を連想配列に保存します。

列を繰り返し、値を連想配列に保存します。

次の2つの列を持つテキストファイルがあります。

26 0.000342231
27 0.000342231
28 0.000684463
29 0.00136893
30 0.00102669
31 0.00308008
32 0.00308008
33 0.00444901
34 0.00718686
35 0.00718686
36 0.0109514
37 0.0123203
...

テキストファイルを繰り返し、各列の値を辞書に似た連想配列に保存したいと思います。可能であれば、各列(intおよびfloat)の値のデータ型を保持したいと思います。

計算するには、ファイルの最後まで特定の間隔の2番目の列値を合計する必要があります。たとえば、「(最初の列)関連値29(0.00136893)を最後の関連値まで合計します。

最良のアプローチは何ですか? BashとPythonのソリューションが最も人気があります!

ベストアンサー1

編集、質問を誤って読み、あなたが尋ねていないことに答えました。熱アイテムが欲しいですか?はい辞書キー?それでは、より多くのデータが到着したら、重複した項目を確認できますか?そうでない場合は、連想配列を必要とせず、通常の索引付けを行うだけです。これにより、どこからでも始めることができます。

BashはFP数学をまったく実行しないので、bash配列にデータを入れることは役に立ちません。 >.<

整数の索引付けが必要で、索引が負になることができない場合は、関連 (文字列索引) 配列ではなく索引配列を使用する必要があります。

ループを使用してwhile read入力を2つの変数に解析し、それを使用して配列を設定します。

declare -a arr
# declare -A arr  # associative

while read c1 c2 leftovers;do
    arr[c1]=$c2;
done < file.txt

echo "arr[4] == ${arr[4]}"

実際には必要なく、declare -aただ使用しても構いません。また、「${#arr}」は配列のコレクション要素の数です。いいえ最後のインデックスでなければなりません。 (arr[-1]最後の要素にアクセスするために使用されます。)は "${!arr[@]}"インデックス(キー)のリストです。

もちろん、他のすべてもbash手動操作から来ています。

おすすめ記事