我有一个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]="MEMORY" ; then
echo ${myArray[(($k+1))]}
fi
done
答案 0 :(得分:1)
如果您只想打印符合您特定条件的行,请尝试
myArray=`cat sdp_aDT_dhk1smc3_Periodic_20140711.log`
for k in $myArray;
do
if [ "$k" = "MEMORY" ]
then
echo "$k"
fi
done
答案 1 :(得分:0)
您可以使用以下命令将该文件内容简单地读入数组:
array=($(cat fileName))
不需要循环。
现在,问你原来的问题:你似乎混淆了array
和myArray
,还是两个不同的东西?我们假设它们是相同的;所以我想你想在项目MEMORY
之后直接输出项目(这就是你的代码的样子)。你可以这样做:
flag=false
for k in "${array[@]}"
do
$flag && echo "$k"
if [ "$k" = "MEMORY" ]
then
flag=true
else
flag=false
fi
done
答案 2 :(得分:0)
简单地:
#!/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
readarray
将输入行转换为数组${!myArray[@]}
填充索引,而不是元素本身printf '%s\n'
将每个参数打印为一行(创建多行)。"${myArray[@]:i + 1}"
表示匹配元素之后的所有元素,并扩展为多个参数。请参阅Bash Reference Manual了解所有内容。