首页 > 解决方案 > Bash 中的嵌套 for 循环和数组

问题描述

我有一个输入文件,它是逗号分隔的行,我需要将其分配给如下所述的键,我已经尝试分配它们,但我无法弄清楚如何分别分配它们但组合在一起,如下所示预期结果.

如果有人能帮我解决这个问题,我将不胜感激,我之前没有使用过数组或逗号分隔的值,并且在让它工作时遇到了问题。

输入文件

10.219.196.0,15gb,Azure Cloud
10.219.196.0,55gb,Google Cloud
10.219.196.0,54gb,AWS Cloud

我必须用密钥 IP 分配 IP 地址,用密钥大小分配大小,用密钥平台分配云名称,棘手的部分是我必须这样分配

预期结果

IP1=10.219.196.0
Size1=15gb
Platform1=Azure Cloud
IP2=10.219.196.0
Size2=15gb
Platform2=Google Cloud
IP3=10.219.196.0
Size3=15gb
Platform3=AWS Cloud

我尝试过的解决方案如下

i=1;
for $line in `cat file`
 do 
    my_ary=$line
    echo "IP$i=${my_ary[0]}"\n
    echo "Size$i=${my_ary[1]}"\n
    echo "platform$i=${my_ary[2]}"\n
    $i++
 done

请让我知道如何解决此问题以获得预期结果。

标签: arraysbashfor-loop

解决方案


for必须使用不带美元符号的变量 in 。

cat您可以使用 . 将文件直接读入数组,而不是循环read -a。设置$IFS以逗号分隔每一行。

对于增量,使用算术表达式((...))

echo在打印其参数后添加一个换行符。不用写了\n

#! /bin/bash
i=1
while IFS=, read -a my_ary ; do 
    echo "IP$i=${my_ary[0]}"
    echo "Size$i=${my_ary[1]}"
    echo "Platform$i=${my_ary[2]}"
    ((i++))
done < "$1"

推荐阅读