【发布时间】:2015-08-23 12:42:40
【问题描述】:
我正在循环读取一个文件,每次迭代都有一个字符串。我需要将此元素添加到数组中,但在新行中
我使用打击 cmd ARRAYNAME+=$ELEMENTNAME
但是会发生什么,该元素被添加到最后一个元素中,但用“”而不是行分隔
while IFS='' read -r line || [[-n "$line" ]];do
MAPPING=`echo $line | grep -e session -e sub | cut -d: -f3 | grep -i ","`
MAPPINGMAT+=("$MAPPING")
echo ${MAPPINGMAT[*]}
done < "$1"
输出
1
1 2
1 2 3
但我需要它
1
2
3
【问题讨论】:
-
您分配给
MAPPING的行无效我不认为,因为grep -i需要一个模式,那么您不会在数组中添加整行,并且您告诉循环在循环的每次迭代中将整行打印在一行上。在while循环之后使用我的答案中的for循环让它在自己的行上打印每个元素 -
grep -i 更新我错过了,我认为 for 应该可以工作,但它会在大文件中做很多处理,因为已经有 while 循环所以我试图避免它
-
如果您在循环的每次迭代中将整个数组打印在一行上,您将获得您报告的输出,除非您改变您的方式,否则无法获得不同的输出打印它。将其添加到数组的方式不是输出问题的一部分,而是生成输出的方式。如果您不想在之后使用单独的循环来打印数组,您可以只在
while中使用echo $MAPPING而不是每次都打印整个数组 -
你所说的就是我所做的。 echo $MAPPING 在 while 循环内完成。我只需要将 MAPPING 的输出添加到数组的单独行中。读取数组应该在while循环之外,这里只是为了跟踪
-
那么我的答案或 deepmax 的答案不起作用怎么办?如果您正在迭代数组元素,那里没有“线”的概念,只有元素,您可以在元素周围插入您喜欢的线。我们的两个答案听起来都像是在做你要求我做的事情
标签: linux bash shell unix command