0

こんにちは、ファイルを配列にキャプチャしてから、その配列を while ループに渡す必要があります。

時間がかかるため、以下のwhileループでスクリプトを実行したくないだけです...

while read line; do

some actions...

done < file.txt

私のサーバーには 8 GB の RAM があり、そのうち 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 に答える