[英]Bash Arithmetic in Array index not working
我有一個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
如果您只想打印與您的特定條件匹配的行,請嘗試
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
,或者它們是兩種不同的東西? 讓我們假設它們是相同的。 所以我想您想直接在 MEMORY
項目之后輸出這些項目(這就是您的代碼的樣子)。 您可以這樣做:
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
readarray
將行從輸入轉換為數組 ${!myArray[@]}
填充索引,而不是元素本身 printf '%s\\n'
每個參數打印為一行(創建多行)。 "${myArray[@]:i + 1}"
表示匹配元素之后的所有元素,並擴展為多個參數。 有關所有內容,請參閱《 Bash參考手冊 》。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.