您好我刚刚开始学习bash脚本,我需要您的帮助来完成这项任务。我必须总结所有整数(来自file.text),这些整数出现在明确的单词之前,例如单词“point”:
“今天我得到5分。但是我应该得到7分,但是2分丢失。”
所以我必须得到7(5 + 2)。当然,结尾的单词应该无关紧要,无论是以“s”结尾(点 s )还是别的,都无关紧要。
任何帮助表示赞赏。
答案 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)
您还可以使用pcregrep
和awk
来解决问题(在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