我想编写一个txt文档,其中包含由3列A、B和C组成的多行,并以空格分隔 其中A总是相同的名称。B是值的序列,即seq 1 100。C是5个名称的循环,即“a”、“b”、“c”、“d”、“e”,然后从“a”再次开始。 例如: 名称A 1 a 名称A 2 B 名称A 3 c 名称A 4 d 名称A 5 e 名称A 6 a ... 我尝试使用seq命令并将其作为一个变量,但不知道如何将这3个变量合并到一个文档中,或者将3个因子(A B C)作为一个变量。
$ colC=({a..e})
$ echo "All items: ${colC[@]}, length: ${#colC[@]}"
All items: a b c d e, length: 5
$ for index in $(seq 0 4); do
> echo "index: $index, value: ${colC[$index]}"
> done
index: 0, value: a
index: 1, value: b
index: 2, value: c
index: 3, value: d
index: 4, value: e
1条答案
按热度按时间flseospp1#
有几种方法可以实现这一点,我将从一个我认为是最优雅的;
说明;
colC
被创建为一个可以通过索引访问的数组。数组的长度可以使用磅号(#
)来访问,所有项都可以使用at(@
)作为索引来访问。注意,默认情况下seq
从1开始,但数组索引从0开始,因此范围应该是0到4。通过访问当前循环与数组长度之间的除法余数(模运算符
%
),则相应的项将被相应地打印出来。示例中的第一行是nameA 1 a
,因此当前索引必须增加一(如果从0开始),或者在访问数组项时减1,如上例所示。否则,结果将以nameA 0 a
、或nameA 1 b
。请将document.txt
替换为目标文件名。另一种方法是人为地增加
colB
的值,同时指示seq
跳过5个项目。这种方法可能更简单,但它要求总行数为5(例如,它不能处理102行),所以我不推荐这样做,只是发布此内容以说明如何操作: