arrays - 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
请让我知道如何解决此问题以获得预期结果。
解决方案
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"
推荐阅读
- typescript - 不同的返回类型取决于输入
- mongodb - 将独立的 MongoDB 实例转换为单节点副本集
- firebase - 我们可以在firebase中通过UID搜索用户应用程序版本和设备操作系统吗?
- git - 如何在 vscode 中隐藏 git blame 时间线?
- ios - 用objective-c中的图像尺寸更改UIImage上文本的字体大小
- next.js - 如何在永久使用后停止我的节点应用程序以启动它
- crafter-cms - CrafterCMS 在初始设置后没有配置站点
- r - 如何使用 R 制作多个箱线图
- javascript - 当孩子也经过时,道具看起来像未定义
- python - 正则表达式匹配包含两个连续数字和字母条纹的“单词”,反之亦然并将它们拆分