次の形式でゲームスコアを保存するためのテキストファイルがあります。
Name: score
Bashスクリプトを使用して名前を1つの配列に入れ、スコアを別の配列に入れようとしました。私の最初の方法はcut
次のコマンドを使用します。
names=(cut -d: -f1 ./scores.txt)
scores=(cut -d: -f2 ./scores.txt)
しかし、この方法は配列の最初の項目に名前とスコアの両方を入れるのでそれほど効率的ではなく、最初の5つの値を別の変数に入れて使用したいのですが、不便です。次に、次のコマンドを試しましたawk
。
names=(awk -F: '{ print $0 }' ./scores.txt)
scores=(awk -F: '{ print $1 }' ./scores.txt)
これは同じことをします。
解析されたすべての値を独自の配列要素に入れる方法や、それを効率的に保存するためのまったく異なるアプローチに対する提案がある人はいますか?また、何らかの理由でこの操作はBashで実行する必要があります。
答え1
入力ファイルに改行のすべての名前/スコアの組み合わせが含まれていると仮定すると、次のように必要な操作が実行されます。
while read line; do
names+=($(echo "$line" | awk '{print $1}' | tr -d ':'))
scores+=($(echo "$line" | awk '{print $2}'))
done < "$INPUT_FILE"