(true_2347087436712_value1_value2_value3_0315764274_Biabia Kudi_Oto Obong_12102022_1)
(true_2347087436712_490.00_150.00_0.00_0315764274_Biabia Kudi_Oto Obong_12102022_1)
シェルスクリプトで上記文字列のvalue1 value2の数字を加算してvalue3に代入したいと考えています。
小数点の加算なのでbcコマンドだと思うのですが、しばらく試行錯誤したのですがvalue1 value2の抽出すらできません。( sed -e 's/[0-9.]+.[0-9]+//g'だと逆の結果になってしまいました)
どのように処理をすれば無駄な手間を省いて最速で処理できるのでしょうか?(パイプを使って連続処理するのではないかと推測しています)
※MacroDroidのシェルスクリプトなので機能制限があるかもしれません。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
ベストアンサー
sed と bc で頑張るなら、例えばこうとか:
shell
1#!/usr/bin/env bash 2 3INPUT='(true_2347087436712_490.00_150.00_0.00_0315764274_Biabia Kudi_Oto Obong_12102022_1)' 4 5FORMULA=$(sed -E "s/^\(true_[0-9]+_([0-9.]+)_([0-9.]+)_.*$/\1+\2/" <<< "$INPUT") # 490.00+150.00 6 7OUTPUT=$(sed -E "s/_0\.00_/_$(bc <<< "$FORMULA")_/" <<< "$INPUT") 8 9echo "$OUTPUT" # (true_2347087436712_490.00_150.00_640.00_0315764274_Biabia Kudi_Oto Obong_12102022_1)
追記
数値としての合計は bc を使い、sed は-e
オプションで使って -E
オプションを使わないことにし、その替わり cutコマンドを使った方法です。
shell
1#!/usr/bin/env bash 2 3INPUT='(true_2347087436712_490.00_150.00_0.00_0315764274_Biabia Kudi_Oto Obong_12102022_1)' 4 5HEAD=$(echo $INPUT | cut -d_ -f1,2,3,4) # (true_2347087436712_490.00_150.00 6TAIL=$(echo $INPUT | cut -d_ -f6,7,8,9,10) # 0315764274_Biabia Kudi_Oto Obong_12102022_1) 7FORMULA=$(echo $INPUT | cut -d_ -f3,4 | sed -e 's/_/+/') # 490.00+150.00 8SUM=$(echo $FORMULA | bc) # 640.00 9 10RESULT="${HEAD}_${SUM}_${TAIL}" 11 12echo $RESULT # (true_2347087436712_490.00_150.00_640.00_0315764274_Biabia Kudi_Oto Obong_12102022_1) 13
投稿2022/10/20 14:05
編集2022/10/20 15:50退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/10/20 14:24
退会済みユーザー
2022/10/20 15:53
退会済みユーザー
2022/10/20 16:07
退会済みユーザー
2022/10/20 23:58
2022/10/21 09:42
2022/10/21 13:04
退会済みユーザー
2022/10/21 13:13
0
shiketa さんの回答とほとんど同じですが。
bash
1$ cat in.txt 2(true_2347087436712_490.00_150.00_0.00_0315764274_Biabia Kudi_Oto Obong_12102022_1) 3 4$ cat in.txt | awk -F_ '{ printf "%s_%s_%s_%s_%.2f_%s_%s_%s_%s_%s\n", $1, $2, $3, $4, $3+$4, $6, $7, $8, $9, $10 }' 5(true_2347087436712_490.00_150.00_640.00_0315764274_Biabia Kudi_Oto Obong_12102022_1) 6 7$ cat in.txt | awk -F_ 'BEGIN{OFS="_"} {$5=$3+$4; print}' 8(true_2347087436712_490.00_150.00_640_0315764274_Biabia Kudi_Oto Obong_12102022_1)
投稿2022/10/20 13:15
総合スコア2857
0
awk案件かな。
( cat <<EOD (true_2347087436712_490.00_150.00_0.00_0315764274_Biabia Kudi_Oto Obong_12102022_1) (true_2347087436712_111.11_222.22_0.00_0315764274_Biabia Kudi_Oto Obong_12102022_1) EOD ) |\ awk -F_ 'BEGIN{ OFS="_" }{ print($1, $2, $3, $4, $3 + $4, $6, $7, $8, $9, $10) }'
(true_2347087436712_490.00_150.00_640_0315764274_Biabia Kudi_Oto Obong_12102022_1) (true_2347087436712_111.11_222.22_333.33_0315764274_Biabia Kudi_Oto Obong_12102022_1)
arcxorさんの回答を参考に。こうも書けますね。
... awk -F_ 'BEGIN{ OFS="_" }{ print($1, $2, $3, $4, sprintf("%.2f", $3 + $4), $6, $7, $8, $9, $10) }'
投稿2022/10/20 12:53
編集2022/10/20 13:44総合スコア4061
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。