Стандартный способ хранения данных многомерного -массива в массиве размерности 1 заключается в сохранении каждой строки со смещением в массиве.
Элемент (i,j)
будет располагаться по индексу i*m + j
, где i
— индекс строки на основе нуля -, j
— индекс столбца на основе нуля -, а m
— количество столбцы.
Это также упрощает чтение данных, поскольку мы можем просто взять ваш входной файл, изменить все пробелы на новые строки и использовать readarray
.
В командной строке:
$ readarray -t arr < <( tr -s ' ' '\n' <data )
$ printf '%s\n' "${arr[@]}"
10
20
30
40
50
60
100
200
300
400
500
600
Мы можем определить количество столбцов в данных с помощью
$ m=$( awk '{ print NF; exit }' <data )
И количество рядов:
$ n=$( wc -l <data )
Затем мы можем перебирать столбцы и строки в двойном цикле, как обычно:
for (( i = 0; i < n; ++i )); do
for (( j = 0; j < m; ++j )); do
printf '%4d' "${arr[i*m + j]}"
done
printf '\n'
done
Для заданных данных это будет генерировать
10 20 30 40 50 60
100 200 300 400 500 600
В идеале вы должны использовать язык, такой как Perl, Python или C, который поддерживает многомерные -массивы. То есть, если вам действительно нужно хранить весь набор данных в памяти вообще и вы не можете обрабатывать его построчно.
Для построчной обработкиawk
будет хорошим кандидатом на заменуbash
(любой язык будет хорошим кандидатом на замену оболочки для любого вида обработки данных):
awk '{ for (i = 1; i <= NF; ++i) printf("%4d", $i); printf("\n") }' data
Насколько мне известно, для лаунчеров на панели xfce4 -нельзя добавить пользовательский значок. Если у приложения есть значок, программа запуска отобразит значок.