【发布时间】:2022-01-22 07:12:29
【问题描述】:
#! /bin/bash
readarray rows < Process.dat
for ((i=0, j=1; i< ${#rows[@]}; i++, j++)); do
declare "row$j"="${rows[$i]}"
done
echo "$row1"
此代码的输出是 10110 556 4433,我尝试使用相同的代码再次更改“行”和“行”的变量但是当我这样做时没有输出,我该如何拆分变量“row1”分为 3 个单独的数字,每个数字分配给不同的变量,例如 row1_1 = 10110, row1_2 = 556, row1_3 = 4433
输入文件由 5 行 3 列数字组成:
10110 556 4433
10120 424 54
12452 123 534
22042 432 12
25321 423 73
这些列分别代表索引时间、突发时间和id号。
我需要锻炼:
- 执行顺序,
- 平均等待时间,
- 平均完成时间
e.g execution order 4433>54>534>12>73.
average completion time = 6132/5
(556+(556+424)+(556+434+123)+(556+424+123+432)+(556+424+123+432+423)) / 5
average wait time = 4174/5
(0+556+(556+424)+(556+424+123)+(556+424+123+432)) / 5
最后的结果是将这些数字中的每一个分配给一个唯一的变量,我以后可以用它来进行数学运算
od -c Process.dat 的输出
0000000 0 1 0 1 3 4 7 5 6 4 4 4 3 \r
0000020 \n 0 1 0 1 3 6 7 4 2 \r \n 0 1
0000040 2 1 4 5 1 6 1 \r \n 0 2 1 2 4
0000060 4 7 2 3 \r \n 0 2 2 1 4 5 7
0000100 1 5 5
0000104
值不同,因为我使用示例文件来检查示例输出的输出,但仍应以相同的方式操作
示例文件和输出
010134 756 443
010136 7 42
012145 16 1
021244 72 3
022145 71 55
outputs:
avg comp = 4141/5
avg wait = 3149/5
【问题讨论】:
-
如果您需要数组的数组,请转向更高级的编程语言。 Perl、Python、Ruby...
-
specific bit of work您是否特别必须创建不同的变量,或者您想稍后使用它们?这些变量毫无意义。 -
“使以后需要的数学变得更容易”——你能说明你在没有之前没有这个操作的情况下尝试做数学时遇到的具体问题吗?
-
仍然需要知道您期望结果变量的样子;这看起来更像XY problem,在这种情况下,如果您可以提供一些示例来说明您计划如何在“稍后需要的数学”中使用这些变量,则可能会更有意义;此外,这个“稍后需要数学”......这将在
while循环中逐行完成,以便可以为每行重复使用 3x 变量,或者您是否需要明确保存每个一组单独的变量中的值行? -
(我赞同 chepner 的说法——如果你真正的意思是“需要使用 Linux 上可用的开箱即用工具”,f/e,这意味着你有 awk,并且对于这类问题,awk 比 bash 好得多;此外,Python 就像 bash 在现代发行版上一样开箱即用)。