簡體   English   中英

數組索引中的Bash算法不起作用

[英]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))

不需要循環。

現在,您的原始問題是:您似乎混淆了arraymyArray ,或者它們是兩種不同的東西? 讓我們假設它們是相同的。 所以我想您想直接 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM