web-dev-qa-db-ja.com

Ubuntuで、列ごとに配列に数値のテキストファイルを読み込むためのbashスクリプトを作成する

私はubuntu 12.04で小さなbashスクリプトを書きたいと思っていますが、経験はほとんどありません。数値のテキストファイルを配列に変換するときの奇妙な問題。私はそれが由来する行よりも多くの列に基づいて数値で計算を実行するので、私はそれ自身の配列に最初の数字、2番目などのすべてが必要です。すべての行は、スペースで区切られた5つの整数で、各行の終わりに戻りがあります。 bashで多次元配列は可能ですか?ありがとうございました!

1
JClar

スクリプトは次のとおりです。テキストファイルの数値を、希望どおりにxyの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として保存することを検討しています。そして、両方が同じディレクトリにあります。

2
souravc

Bashは1次元の配列のみをサポートしますが、少し巧妙な方法で多次元配列をシミュレートできます。

このドキュメントには、2次元配列の例が含まれています。 http://tldp.org/LDP/abs/html/arrays.html

別の言語があなたのユースケースにもっと簡単に適合するのではないかと思います。 Python、Perl、またはRubyがこのタスクを簡単に処理できるのに対して、bashでできることの限界を広げているように見えます。これからの「計算」に使用するツールがこれを大いに決定すると思います。

1
roadmr