Grep 行的其余部分..... 比赛后

njo*_*dan 8 grep sed awk text-processing

我有一个只包含两行的文件,其结构如下:

$ cat /tmp/pwpower.log
000D6F0000D34227, -114.10
000D6F0001A405C4, -130.09
Run Code Online (Sandbox Code Playgroud)

这些值是我的太阳能发电厂的功率值。负值意味着生成。

我需要通过 grep/sed/awk 提取的值 - 无论是最聪明的方式。我需要分别提取两个值并且不带减号。

我现在所做的有点愚蠢,但它有效 - 我相信你们中的许多人会对我有更聪明的方法:-) 这里当然我只看到值加上减号。

获取第一个值:

cat /tmp/pwpower.log |grep -o "\-.*" | head -n 1
Run Code Online (Sandbox Code Playgroud)

获取第二个值:

cat /tmp/pwpower.log |grep -o "\-.*" | tail -n1
Run Code Online (Sandbox Code Playgroud)

和相关的问题,是否有一种简单的方法来获取这些 STRING 并进行转换,以便我可以计算 SUM ?

Adr*_*rth 12

所有值:

$ awk -F '[ -]*' '$0=$NF' /tmp/pwpower.log
114.10
130.09
Run Code Online (Sandbox Code Playgroud)

第一行的值:

$ awk -F '[ -]*' 'NR==1{print $NF;exit}' /tmp/pwpower.log
114.10
Run Code Online (Sandbox Code Playgroud)

第二行的值:

$ awk -F '[ -]*' 'NR==2{print $NF;exit}' /tmp/pwpower.log
130.09
Run Code Online (Sandbox Code Playgroud)

所有值的总和:

$ awk -F '[ -]*' '{sum+=$NF} END{print sum}' /tmp/pwpower.log
244.19
Run Code Online (Sandbox Code Playgroud)


slm*_*slm 9

您可以使用cut选择第二列数字,并paste -sd+创建一系列数字相加。bc然后可以使用该工具进行计算。

$ cut -d',' -f2 pwpower.log | paste -sd+ | bc
-244.19
Run Code Online (Sandbox Code Playgroud)

这个怎么运作

从第二列中选择数字。

$ cut -d',' -f2 pwpower.log 
 -114.10
 -130.09
Run Code Online (Sandbox Code Playgroud)

将它们重新格式化为一行,+每个数字之间有一个符号:

$ cut -d',' -f2 pwpower.log | paste -sd+
 -114.10+ -130.09
Run Code Online (Sandbox Code Playgroud)

执行计算:

$ cut -d',' -f2 pwpower.log | paste -sd+ | bc
-244.19
Run Code Online (Sandbox Code Playgroud)

获取绝对值:

$ cut -d',' -f2 pwpower.log | sed 's/-//g' | paste -sd+ | bc
244.19
Run Code Online (Sandbox Code Playgroud)

如果pwpower.log保证文件的格式,您可以cut省略减号:

$ cut -d'-' -f2 pwpower.log | paste -sd+ | bc
244.19
Run Code Online (Sandbox Code Playgroud)


ste*_*ver 6

亲吻方法

$ awk '{print -$2; t+=-$2}; END{print t}' pwpower.log 
114.1
130.09
244.19
Run Code Online (Sandbox Code Playgroud)

  • 保持简单,愚蠢。暗示当您不保持简单时,您就是愚蠢的。 (4认同)