0

嗨,我必须将文件捕获到一个数组中,然后将该数组传递到 while 循环中。

我只是不想用下面的while循环执行我的脚本,因为它需要很长时间......

while read line; do

some actions...

done < file.txt

我的服务器有 8 GB 内存,其中 6 GB 始终可用。所以请让我知道天气最好将大小为 100 MB 的文件捕获到内存(数组)中并对其执行 grep、sed、awk 等操作。

如果是,请告诉我如何将文件捕获到数组中。

如果不是请建议我另一种提高性能的方法。

4

2 回答 2

1

我不确定是否理解...

你需要这样的东西吗?

array=()

# Read the file in parameter and fill the array named "array"
getArray() {
    i=0
    while read line
    do
        array[i]=$line
        i=$(($i + 1))
    done < $1
}

getArray "file.txt"
for line in "${array[@]}"
do
    # some actions using $line
done

编辑 :

要回答您的问题,是的,可以将数据 grep 到一个数组中并将其推送到另一个数组中。可能有更好的方法来做到这一点,但这有效:

array2=()

# Split the string in parameter and push the values into the array
pushIntoArray() {
    i=0
    for element in $1
    do
        array2[i]=$element
        i=$(($i + 1))
    done
}

array1=("foo" "bar" "baz")
# Build a string of the elements into the array separated by '\n' and redirect the ouput to grep.
str=`printf "%s\n" "${array1[@]}" | grep "a"`
pushIntoArray "$str"
printf "%s\n" "${array2[@]}" # Display array2 line by line

此片段的输出:

$ ./grep_array.sh
bar
baz
于 2013-08-20T16:56:00.053 回答
-2

你想要一个while循环。尝试这个:

while read d; do
      echo $d
done < dinosaurs.txt

享受

于 2013-08-20T15:56:47.027 回答