Я пытаюсь создать таблицу на основе ASCII ниже. Мне нужно расположить числа из 2-го столбца в матрице. Первый и третий столбцы ASCII дают столбцы и строки в новой матрице. Новая матрица должна быть полностью заполнена, поэтому необходимо заполнить недостающие позиции в новой таблице с помощью NA (или -999).
Это то, что у меня
$ cat infile.txt
1 68 2
1 182 3
1 797 4
2 4 1
2 70 2
2 339 3
2 1396 4
3 12 1
3 355 3
3 1854 4
4 7 1
4 85 2
4 333 3
5 9 1
5 68 2
5 182 3
5 922 4
6 10 1
6 70 2
и что я хотел бы иметь:
NA 4 12 7 9 10
68 70 NA 85 68 70
182 339 355 333 182 NA
797 1396 1854 NA 922 NA
Я могу использовать только стандартные UNIX команды (например, awk, sed, grep, et c).
Итак, что у меня так далеко ...
Я могу скопировать c 2-мерный массив в bash
irows=(`awk '{print $1 }' infile.txt`) # rows positions
jcols=(`awk '{print $3 }' infile.txt`) # columns positions
values=(`awk '{print $2 }' infile.txt`) # values
declare -A matrix # the new matrix
nrows=(`sort -k3 -n in.txt | tail -1 | awk '{print $3}'`) # numbers of rows
ncols=(`sort -k1 -n in.txt | tail -1 | awk '{print $1}'`) # numbers of columns
nelem=(`echo "${#values[@]}"`) # number of elements I want to pass to the new matrix
# Creating a matrix (i,j) with -999
for ((i=0;i<=$((nrows-1));i++)) do
for ((j=0;j<=$((ncols-1));j++)) do
matrix[$i,$j]=-999
done
done
и даже распечатать на экране
for ((i=0;i<=$((nrows-1));i++)) do
for ((j=0;j<=$((ncols-1));j++)) do
printf " %i" ${matrix[$i,$j]}
done
echo
done
Но когда я пытался назначить элементы, что-то пошло не так
for ((i=0;i<=$((nelem-1));i++)) do
matrix[${irows[$i]},${jcols[$i]}]=${values[$i]}
done
Заранее спасибо за любую помощь с этим, правда.