特定の文字列の後に特定の値を抽出して別の変数に保存する方法は?

特定の文字列の後に特定の値を抽出して別の変数に保存する方法は?

私はLinuxに初めて触れました。自動化が完了したら、生成された要約ファイルを解析する必要があります。要約ファイルは次のとおりです。

Total_Test_Cases_Count:25
Total_Pass:24
Total_Fail:1
Execution_Duration:5m 7sec
Pass_Percentage:96.11%
Failure_Percentage:3.89%

この値が変数に個別に存在し、他の関数に渡すことができるようにしたいです。

私の予想結果:

Total_Test_Cases_Count(as a variable) with value 25.
Total_Pass(as a variable) with value 24.

他の人にも同じです。

私が今まで試したこと:

awk "NR==1" summary.txt

これは作る

TotalCount:25

ベストアンサー1

これは連想配列を使用するのが最善です。例えば

declare -A array

while IFS=: read key val; do
  array["$key"]="$val"
done < input.txt

for key in Total_Test_Cases_Count Total_Pass; do
  printf '%s=%s\n' "$key" "${array[$key]}"
done

出力:

Total_Test_Cases_Count=25
Total_Pass=24

値にフィールド区切り文字(コロン、)が含まれていると、:この操作は失敗します。この場合、まず入力のフィールド区切り文字を両方のフィールドに存在しない区切り文字に変更する必要があります。通常、タブは良い選択です。たとえば、

while IFS=$'\t' read key val; do
  array["$key"]="$val"
done < <(sed -e 's/:/\t/1' input.txt)

IFSはタブ文字を区切り文字として使用するように設定されており、このsedコマンドは最初の(最初のみ)コロン文字をタブ文字に変更します。

おすすめ記事