我正在尝试从一堆文件中获取特定信息。
遍历文件列表,grep
满足我的需求。我确定每个grep
都会给出1个以上的结果,并且我想将该结果存储在数组中。完成特定于文件的工作后,我要删除数组中的所有内容并重新开始新文件。
files_list=`ls`
for f in $files_list
do
echo $f
arr1=`cat $f | grep "abc" | grep "xyz"`
arr2=`cat $f | grep "pqr" | grep "mno"`
arr3=`cat $f | grep "df"`
for ((i=0; i<${#arr1[@]}; ++i))
do
printf "%s %s %s\n" "${arr1[i]}" "${arr2[i]}" "${arr3[i]}"
done
unset $arr1
unset $arr2
unset $arr3
done
所以我用unset
来清空数组,但是它给出了错误。
line 49: unset: `x': not a valid identifier
我不想删除特定的数组成员/索引,而是删除整个数组本身。谁能告诉我该怎么做?
答案 0 :(得分:3)
unset
使用变量名,而不是它们保留的值。所以:
unset arr1
unset arr2
unset arr3
或者只是
unset arr{1..3}
我也建议为该任务使用真实数组,例如:
arr+=(`cat $f | grep "abc" | grep "xyz"`)
arr+=(`cat $f | grep "pqr" | grep "mno"`)
arr+=(`cat $f | grep "df"`)
您可以像这样访问数组成员:
echo ${arr[1]}
并清空数组,如下所示:
unset arr
您使用cat
和grep
的方式在我看来也是错误的。我会这样:
grep -e 'abc' -e 'xyz' "$f"