【问题标题】:Parsing Numbers from a File and using those to calculate从文件中解析数字并使用这些数字进行计算
【发布时间】:2015-01-08 10:58:52
【问题描述】:

用 Bash 解析一些 HTML 文件似乎很愚蠢。我们有一些文件的行如下:

var A4_total = 2018 + 4730;
var Other1_total = 3242 + 3828;

(它们告诉我们打印机打印了多少页)。 我需要一起计算前两个值(2018 和 3242)。我的方法是:

hilfsvar1=$(echo `grep -F var\ A4_total StatCntMedia.htm | sed 's/var\ A4\_total\ \=\ //g'` | sed -ne "s/^[^=]\++//p"  | sed 's/;//g'); hilfsvar2=$(echo `grep -F var\ Other1_total StatCntMedia.htm | sed 's/var\ Other1\_total\ \=\ //g'` | sed -ne "s/^[^=]\++//p"  | sed 's/;//g'); echo "$hilfsvar1 + $hilfsvar2" | bc

这将失败。这两个变量确实有正确的内容:

[User]# echo $hilfsvar1
4730
[User]# echo $hilfsvar2
3828

但这是我无法前进的地方:

[User]# echo "$hilfsvar1 + $hilfsvar2"
 +  3828

(对不起我的脚本,我对脚本语言没有更深入的了解:))-如果有人确实有解决方案,我很乐意以另一种方式解决这个问题。

提前致谢,乔纳斯

【问题讨论】:

  • 你的命令在这里有效,也许你的文件有比你在问题中显示的更多的空间?
  • 正确的英文不是to stupid,而是too stupid :-)。
  • 我想对此表示赞同,但似乎我太愚蠢了 :) 谢谢

标签: bash sed bc


【解决方案1】:

听起来这可能就是您要找的东西:

$ awk '{sum[4]+=$4; sum[6]+=$6} END{print sum[4], sum[6]}' file
5260 8558

如果没有,请更新您的问题以显示预期输出。

看起来你可能完全走错了路,并试图在 shell 中做一些应该完全在 awk 中完成的事情。

【讨论】:

  • 这太完美了,谢谢!我将尝试了解那里到底发生了什么:)
【解决方案2】:

尝试类似:

awk '/A4_total|Other1_total/ {print $4+$6}' StatCntMedia.htm 
Output:
6748
7070

搜索 A4_total 或 Other1_total,添加以空格分隔的第 4 和第 6 字段并显示输出。

【讨论】:

  • 短一点awk '/(A4|Other1)_total/{print $4+$6}'
  • 虽然这行得通,但我似乎太愚蠢了,无法添加这两个:/。 [用户]# awk '/(A4|Other1)_total/{print $4+$6}' StatCntMedia.htm |grep -xv "0" |bc 6748 7070
  • 嗨,我正在尝试将 A4_total 的第一个字段与 Other1_total 的第一个字段相加,第二个字段与第二个字段相加。 (应该是 2018+3242 和 4730+3828。感谢您的帮助!:)
  • 那么这些模式在您的文件中出现了多少次?我建议你结束这个问题并提出一个新问题,因为这是一个后续问题。
  • @almasshaikh:这是他最初要求的,尽管它可能更清楚。
猜你喜欢
  • 2021-11-09
  • 2017-10-22
  • 1970-01-01
  • 2018-03-13
  • 1970-01-01
  • 2012-11-20
  • 2013-06-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多