我有以下while循环:
while read LINE; do
VALUE="`echo $LINE | cut -d"|" -f1`";
done
注意f1。这是我使用cut的常规方式。这一次,我需要像这样增加f1:
while read LINE; do
VALUE="`echo $LINE | cut -d"|" -f$COUNT`";
done
我无法弄清楚正确的语法。有人可以帮帮我吗?谢谢!
*更新*
这是我的完整代码(如果这有助于更多)
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
*更新*
好的,我刚刚意识到我的逻辑是有缺陷的。第一个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 :(得分:1)
您可以使用read
命令自行拆分行:
for i in "${!DBARRAY[@]}"; do
while IFS='|' read -ra FIELDS; do
printf "%s\n" "${FIELDS[@]}"
done < <(grep -v '#' databases/${DBARRAY[$i]})
done
http://www.gnu.org/software/bash/manual/bashref.html#index-read
答案 1 :(得分: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
此代码可以解决!