私は与えられたファイルを読み込んで2次元配列に格納するシェルスクリプト関数を書いています。Bashシェルファイルを配列に読み込む関数
File.txt
a1 b1 c1
a2 b2 c2
a3 b3 c3
# Let's just assume 3 rows
アイデアは、私が何を得る
declare -a array
num_rows=0
read_data File.txt array num_rows
の下に呼び出した後、関数のシグネチャread_data File.txt array num_rows
read_data() {
if [ ! -f $1 ]; then
echo "Failed to read hosts ($1 not found)";
exit;
fi
while read -r line; do
# skip the comments
{ [[ "$line" =~ ^#.*$ ]] || [[ -z $line ]] ;} && continue
# Parse the line
read -a tokens <<< $line
if [ ${#tokens[@]} == 3 ]; then
# Extract the user/host/home
eval $2[\$$3, 0]=\${tokens[0]}
eval $2[\$$3, 1]=\${tokens[1]}
eval $2[\$$3, 2]=\${tokens[2]}
eval $3=$(($3+1))
else
echo "Wrong line format '$line'"
fi
done < $1
}
で、eval
を使用してreference
して、ストレージを渡すことですnum_rows
ある3
に等しいが、配列に格納されているコンテンツは
pnt_data() {
for ((i=0; i<$2; i++)); do
eval a=\${$1[$i, 0]}
eval b=\${$1[$i, 1]}
eval c=\${$1[$i, 2]}
echo $a $b $c
done
}
pnt_data array num_rows
a3 b3 c3
a3 b3 c3
a3 b3 c3
これはどうなりますか?私の機能に何か問題はありますか?
Bashは2D配列をサポートしていないため、別の言語を選択してください。 awkはそれをサポートしています。個人的に私はPerlまたはPythonを検討します。 – cdarke