2014-01-17 222 views
1

我有while循環如下:while循環變量納入

while read LINE; do 
    VALUE="`echo $LINE | cut -d"|" -f1`"; 
done 

通知的F1。這是我使用剪切的正常方式。這一次,我需要像這樣增加f1有點:

while read LINE; do 
    VALUE="`echo $LINE | cut -d"|" -f$COUNT`"; 
done 

我找不出正確的語法。有人可以幫幫我嗎?謝謝!

* UPDATE *

這裏是我完整的代碼(如果這能幫助更多)

declare -a FIELDS 
local i 
for i in "${!DBARRAY[@]}"; do 
    local COUNT=1 
    while read LINE; do 
    VALUE="`echo $LINE | cut -d"|" -f$COUNT`"; 
    FIELDS[$COUNT]="$VALUE" 

     Do stuff to each element of array here 

    let COUNT=COUNT+1 
    done < <(grep -v '#' databases/${DBARRAY[$i]}) 
done 

* UPDATE *

好了,所以我才意識到我的邏輯是有缺陷的。第一個for循環是循環遍歷所有數據庫。 while循環是循環遍歷單個數據庫中的每一行。我需要第三個循環來將每個字段存儲到數組中。請參閱下面的更新代碼:

declare -a FIELDS 
local i 
local j 
for i in "${!DBARRAY[@]}"; do 
    local COUNT=1 
    while read LINE; do 
    for ((j=1; j<=24; j++)); do 
     VALUE="`echo $LINE | cut -d"|" -f"$j"`"; 
     FIELDS[$j]="$VALUE" 
     echo "${FIELDS[$j]}" 
    done 
    let COUNT=COUNT+1 
    done < <(grep -v '#' databases/${DBARRAY[$i]}) 
done 

此代碼可以工作!

回答

0

好了,所以我才意識到我的邏輯是有缺陷的。第一個for循環是循環遍歷所有數據庫。 while循環是循環遍歷單個數據庫中的每一行。我需要第三個循環來將每個字段存儲到數組中。請參閱下面的更新代碼:

declare -a FIELDS 
local i 
local j 
for i in "${!DBARRAY[@]}"; do 
    local COUNT=1 
    while read LINE; do 
    for ((j=1; j<=24; j++)); do 
     VALUE="`echo $LINE | cut -d"|" -f"$j"`"; 
     FIELDS[$j]="$VALUE" 
     echo "${FIELDS[$j]}" 
    done 
    let COUNT=COUNT+1 
    done < <(grep -v '#' databases/${DBARRAY[$i]}) 
done 

此代碼可以工作!