如何从bash中的文本文件中获取整数之和

时间:2017-04-29 14:26:49

标签: bash

您好我刚刚开始学习bash脚本,我需要您的帮助来完成这项任务。我必须总结所有整数(来自file.text),这些整数出现在明确的单词之前,例如单词“point”:

“今天我得到5分。但是我应该得到7分,但是2分丢失。”

所以我必须得到7(5 + 2)。当然,结尾的单词应该无关紧要,无论是以“s”结尾(点 s )还是别的,都无关紧要。

任何帮助表示赞赏。

3 个答案:

答案 0 :(得分:1)

gawk 方法:

我们说file.txt包含:

Today I got 5 points. However I should got 7 but, 2 point lost.
Today I got 5 points. However I should got 7 but, 2 point lost.

命令:

awk -F ' point' '{for(i=1;i<NF;i++){ match($i,/[0-9]+$/); sum+=substr($i,RSTART,RLENGTH) }}
     END {print sum}' file.txt

输出:

14
带有前置空格的

-F ' point' - point字符串被视为字段分隔符

答案 1 :(得分:1)

您还可以使用pcregrepawk来解决问题(在OSX上测试)

$ cat file.txt
Today I got 5 points. However I should got 7 but, 2 point lost.
$ cat file.txt | pcregrep -Mo '\d+ (?=points?)' | awk '{s+=$1} END {print s}'
7

或者通过创建包含以下内容的名为sum.sh的文件来转换为脚本文件:

#!/bin/bash
pcregrep -Mo '\d+ (?=points?)' | awk '{s+=$1} END {print s}'

更改文件模式:

$ chmod +x sum.sh

然后,运行

$ ./sum.sh < file.txt
7

答案 2 :(得分:0)

也许这有效:

awk -v RS='[0-9]+' '{n+=RT};END{print n} file.text

Found this snippet here with a web search engine