私がこれを持っているとしましょう:
ARRAY=()
NUM_EXTRACTED=$(cat somefile.txt | awk '/magic/{i++; print > i "_extracted.txt"} END {print i}')
for (( i=1; i<=$NUM_EXTRACTED; i++)); do
LINE=$(cat "$i"_extracted.txt)
ARRAY+=("$LINE")
done
このスクリプトは、「magic」という単語を含むsomefile.txtのすべての行を取得し、ARRAY配列に配置します。
行を一時ファイルに保存せずにARRAYを直接埋める方法は?
答え1
では、組み込み関数と連携bash
します。readarray
readarray -t myarray < <(grep magic somefile.txt)
より一般的に言えば、シェルがテキストを処理するためにループを使用している場合は、おそらく間違って実行しています。シェル配列を使用して作業することは、通常、適切なプログラミング言語も必要であることを示します(またはですべての操作を実行しますawk
)。