次のような構造の 2 行のみを含むファイルがあります。
$ cat /tmp/pwpower.log
000D6F0000D34227, -114.10
000D6F0001A405C4, -130.09
値は私の太陽光発電所の電力値です。負の値は発電を意味します。
grep/sed/awk など、最もスマートな方法で値を抽出する必要があります。両方の値をマイナス記号なしで個別に抽出する必要があります。
私が今やっていることはちょっと馬鹿げているのですが、うまくいきます。皆さんの中にはもっと賢い方法を持っている人も多いと思います :-) もちろん、ここではプラスマイナスの値しか見えません。
最初の値を取得するには:
cat /tmp/pwpower.log |grep -o "\-.*" | head -n 1
2 番目の値を取得するには:
cat /tmp/pwpower.log |grep -o "\-.*" | tail -n1
関連する質問ですが、これらの文字列を取得して変換し、合計を計算できる簡単な方法はありますか?
答え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
cut
2 列目の数字を選択し、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
KISSアプローチ
$ 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
これにより、マイナスなしで計算が行われます。
一般的にはcutの方がawkより速いと思います