Arrays 数组索引中的Bash算法不起作用
我有一个bash脚本,其中我需要根据条件检查数组,如果它匹配,我需要在特定匹配之后打印行。我的代码如下:Arrays 数组索引中的Bash算法不起作用,arrays,bash,Arrays,Bash,我有一个bash脚本,其中我需要根据条件检查数组,如果它匹配,我需要在特定匹配之后打印行。我的代码如下:echo${myArray[($k+1))]}不工作 i=0; for j in `cat sdp_aDT_dhk1smc3_Periodic_20140711.log` do array[$i]=$j; i=$(($i+1)); done k=0; for k in myArray; do if myArray[$k]="MEMO
echo${myArray[($k+1))]}
不工作
i=0;
for j in `cat sdp_aDT_dhk1smc3_Periodic_20140711.log`
do
array[$i]=$j;
i=$(($i+1));
done
k=0;
for k in myArray;
do
if myArray[$k]="MEMORY" ; then
echo ${myArray[(($k+1))]}
fi
done
如果您只想打印符合您特定条件的行,请尝试
myArray=`cat sdp_aDT_dhk1smc3_Periodic_20140711.log`
for k in $myArray;
do
if [ "$k" = "MEMORY" ]
then
echo "$k"
fi
done
您可以使用以下命令将该文件内容读入数组:
array=($(cat fileName))
不需要循环
现在,回到您最初的问题:您似乎混淆了array
和myArray
,或者它们是两种不同的东西?让我们假设他们注定是一样的;因此,我认为您希望直接在itemsMEMORY
之后输出这些项(这就是您的代码的样子)。您可以这样做:
flag=false
for k in "${array[@]}"
do
$flag && echo "$k"
if [ "$k" = "MEMORY" ]
then
flag=true
else
flag=false
fi
done
简单地说:
#!/bin/bash
readarray -t myArray < sdp_aDT_dhk1smc3_Periodic_20140711.log
for i in "${!myArray[@]}"; do
if [[ ${myArray[i]} == 'MEMORY' ]]; then
printf '%s\n' "${myArray[@]:i + 1}"
break
fi
done
#/bin/bash
readarray-t myArray
将行从输入转换为数组readarray
填充索引,而不是元素本身${!myArray[@]}
将每个参数打印为一行(创建多行)printf“%s\n”
表示匹配元素之后的所有元素,并展开为多个参数“${myArray[@]:i+1}”
所有信息请参阅。您在
($k+1))
之前缺少了$
。这真的是您的真实代码吗?至少myArray应该是$myArray谢谢大家..非常有用