echo
私の行列の要素を印刷するときに問題があります。最初のループからコメントアウトを削除すると、echo ${matrix[$i,$j]}
プログラムは正常に機能しますが、2番目のループで印刷しようとすると、${matrix[$i,$j]}
出力はNULL文字です。目的は、ファイルから行列を読み取り、スクリプトで宣言された行列を私の行列に割り当てることです。
function readMatrixFromFile() {
local file="$1"
declare -A matrix
local num_rows=$(awk 'NR==1 {print $3}' $1)
local num_colums=$(awk 'NR==2 {print $3}' $1)
for ((i=3;i<=num_rows+2;i++)) do
for ((j=1;j<=num_colums;j++)) do
k=i-2
matrix[$k,$j]=$(awk -v row=$i -v col=$j 'NR==row {print $col}' $file)
#echo ${matrix[$i,$j]}
done
done
for ((i=1;i<=num_rows;i++)) do
for ((j=1;j<=num_colums;j++)) do
echo ${matrix[$i,$j]}
done
echo
done
}
function Main() {
readMatrixFromFile Matrix3.txt
}
Main
これはMatrix3.txtです。
出力は次のとおりです。
ベストアンサー1
#!/bin/bash
declare -A m
read_matrix() {
local i=0
local line
local j
# Ignore the first 2 lines containing size of the matrix
read rows
read cols
while read -r line; do
j=0
# split on spaces
for v in `echo $line`; do
m[$i,$j]="$v"
j=$((j+1))
done
i=$((i+1))
done
}
read_matrix < matrix.file
echo ${m[1,2]}