出力には、次のようなbash関数FUNCTION_Aがあります。
ID HELD_SINCE HOLD_REASON
123456.0 7/1 20:40 Peak usage: 2370 megabytes.
123457.0 7/1 20:40 Peak usage: 5008 megabytes.
その後、FUNCTION_Bに渡すには、ID number
合計の後に数字を取得する必要があります。Peak usage:
手動で実行すると、次のようになります。
FUNCTION_B 123456.0 2370
FUNCTION_B 123457.0 5008
私は正規表現を使ってこれらの2つの数を取得し、シェルでランダムな数を実行するbashスクリプトを書こうとしていますFUNCTION_A
。いくつかの異なる場所にあります。
出力を1行ずつ繰り返す方法がわからず、なぜ配列に出力がないのかわかりませんが、次のようなことをしたいと思います。
re='([0-9-]+\.[0-9-]+).*Peak usage: ([0-9-]+) megabytes\.'
for line in FUNCTION_A output
if [[ line =~ $re ]]; then
myArray=($(echo s | egrep -Eo re))
eval FUNCTION_B ${myArray[0]} ${myArray[1]}
fi
ベストアンサー1
Bashでキャプチャブラケットを使用できます。BASH_REMATCH
変数
function_A_output=$(FUNCTION_A)
re='([0-9-]+\.[0-9-]+).*Peak usage: ([0-9-]+) megabytes\.'
while IFS= read -r line; do
if [[ $line =~ $re ]]; then
FUNCTION_B "${BASH_REMATCH[1]}" "${BASH_REMATCH[2]}"
fi
done <<<"$function_A_output"
要件はありませんeval
。
使うプロセスの交換、$function_A_output変数は必要ありません。
re='([0-9-]+\.[0-9-]+).*Peak usage: ([0-9-]+) megabytes\.'
while IFS= read -r line; do
if [[ $line =~ $re ]]; then
FUNCTION_B "${BASH_REMATCH[1]}" "${BASH_REMATCH[2]}"
fi
done < <$(FUNCTION_A)
# ....^ that space is intentional