私はubuntu 12.04で小さなbashスクリプトを書きたいと思っていますが、経験はほとんどありません。数値のテキストファイルを配列に変換するときの奇妙な問題。私はそれが由来する行よりも多くの列に基づいて数値で計算を実行するので、私はそれ自身の配列に最初の数字、2番目などのすべてが必要です。すべての行は、スペースで区切られた5つの整数で、各行の終わりに戻りがあります。 bashで多次元配列は可能ですか?ありがとうございました!
スクリプトは次のとおりです。テキストファイルの数値を、希望どおりにx
とy
の2つの配列に格納します。
#!/bin/bash
nl=$(cat "$1" | wc -l)
declare -a x
declare -a y
for i in $(seq 1 $nl)
do
x[i]="$(cat "$1" | awk -v p="$i" '{if(NR==p) print $1}')"
y[i]="$(cat "$1" | awk -v p="$i" '{if(NR==p) print $2}')"
done
#upto this point all the numbers from first and second column of the file are stored
#into x and y respectively. Following lines will just print them again for you.
for it in $(seq 1 $nl)
do
echo "${x[$it]} ${y[$it]}"
done
スクリプトの実行許可を与えることを忘れないでください。
chmod +x script.sh
使用法
./script.sh numfile.txt
上記のスクリプトをscript.sh
として保存し、数字を含むテキストファイルはnumfile.txt
として保存することを検討しています。そして、両方が同じディレクトリにあります。
Bashは1次元の配列のみをサポートしますが、少し巧妙な方法で多次元配列をシミュレートできます。
このドキュメントには、2次元配列の例が含まれています。 http://tldp.org/LDP/abs/html/arrays.html
別の言語があなたのユースケースにもっと簡単に適合するのではないかと思います。 Python、Perl、またはRubyがこのタスクを簡単に処理できるのに対して、bashでできることの限界を広げているように見えます。これからの「計算」に使用するツールがこれを大いに決定すると思います。