Grep 其餘行......匹配後

Grep 其餘行......匹配後

我有一個僅包含兩行的文件,其結構如下:

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

這些值就是我的太陽能發電廠的功率值。負值意味著生成。

我需要透過 grep/sed/awk 提取的值 - 無論是最聰明的方式。我需要單獨提取兩個值並且不帶減號。

我現在所做的有點愚蠢,但它有效 - 我相信你們中的許多人都會為我提供更聰明的方法:-) 當然,這裡我只看到值加減。

取得第一個值:

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

取得第二個值:

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

第二行的值:

$ 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選擇第二列數字,並paste -sd+建立一系列要相加的數字。然後可以使用該工具bc進行計算。

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

怎麼運作的

從第二列中選擇數字。

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

將它們重新格式化為一行,+每個數字之間有一個符號:

$ 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 更快

相關內容