マッチング後、残りの行をGrepします。

マッチング後、残りの行をGrepします。

次のように構成された2行のみを含むファイルがあります。

$ cat /tmp/pwpower.log
000D6F0000D34227, -114.10
000D6F0001A405C4, -130.09

これは私が運営する太陽光発電所の電力値です。負の値は生成を意味します。

最も賢明な方法であるgrep / sed / awkから値を抽出する必要があります。マイナス記号なしで2つの値を個別に抽出する必要があります。

今私がやっていることは少し愚かなことですが、効果があります。あなたの多くは私にもっと賢い方法を提案することができると確信しています。 :-) もちろん、ここでは値の加算と減算のみを見ることができます。

最初の値を取得します。

cat /tmp/pwpower.log |grep -o "\-.*" | head -n 1

2番目の値を取得します。

cat /tmp/pwpower.log |grep -o "\-.*" | tail -n1

関連する質問は、これらのSTRINGを取得してSUMを計算できるように変換する簡単な方法はありますか?

答え1

すべての値:

$ awk -F '[ -]*' '$0=$NF' /tmp/pwpower.log
114.10
130.09

最初の行の値:

$ awk -F '[ -]*' 'NR==1{print $NF;exit}' /tmp/pwpower.log
114.10

2行目の値:

$ awk -F '[ -]*' 'NR==2{print $NF;exit}' /tmp/pwpower.log
130.09

すべての値の合計:

$ awk -F '[ -]*' '{sum+=$NF} END{print sum}' /tmp/pwpower.log
244.19

答え2

cut2番目の数字列を選択して、paste -sd+追加する一連の数字を作成できます。その後、このツールを使用してbc計算を実行できます。

$ cut -d',' -f2 pwpower.log | paste -sd+ | bc
-244.19

どのように動作しますか?

2番目の列で数字を選択します。

$ cut -d',' -f2 pwpower.log 
 -114.10
 -130.09

+各数字の間に記号を使用して1行にフォーマットを変更します。

$ cut -d',' -f2 pwpower.log | paste -sd+
 -114.10+ -130.09

計算を実行します。

$ cut -d',' -f2 pwpower.log | paste -sd+ | bc
-244.19

絶対値を得るには:

$ cut -d',' -f2 pwpower.log | sed 's/-//g' | paste -sd+ | bc
244.19

ファイル形式がpwpower.log保証されている場合は、cutマイナス記号を省略できます。

$ cut -d'-' -f2 pwpower.log | paste -sd+ | bc
244.19

答え3

キス方式

$ awk '{print -$2; t+=-$2}; END{print t}' pwpower.log 
114.1
130.09
244.19

答え4

[root@ip-10-186-149-181 ~]# cut -d '-' -f2 /tmp/pwpower.log | paste -sd+ | bc
244.19

これにより、負の数なしで計算が実行されます。

一般的にカットがawkより速いと思います。

関連情報