输入文件(FileInput.txt):
10
20 3
100 5 3
27
这是我的 awk 脚本:
BEGIN{
while((getline line < "FileInput.txt") > 0) {
}
我如何计算总和?sum+=line
但是我尝试过它只对第一列求和。
类似的东西可以完成这项工作:
awk 'BEGIN {sum=0} {for (i = 1; i <= NF; i++) sum+=$i} END {print sum}' FileInput.txt
Run Code Online (Sandbox Code Playgroud)
您的代码存在双重问题:
awk
通常那样使用。它显式地遍历BEGIN
块中文件的行。这不是人们通常编写awk
程序的惯用方式,即为要为每个输入记录(行)执行的块提供(可选)模式或条件。20 3
到sum
,但必须先将其拆分为20
和3
。使用 GNU awk
or mawk
,我们可以将记录分隔符 , 设置为RS
匹配任何空白字符序列而不是默认换行符的正则表达式。这使得awk
读取文件作为空格分隔的单个字段记录的集合。总结这些并在最后打印总和是微不足道的:
$ awk -v RS='[[:space:]]+' '{ sum += $1 } END { print sum }' FileInput.txt
168
Run Code Online (Sandbox Code Playgroud)
或者,
$ awk 'BEGIN { RS = "[[:space:]]+" } { sum += $1 } END { print sum }' FileInput.txt
168
Run Code Online (Sandbox Code Playgroud)
或者,您可以对Romeo Ninov 显示的内容进行一些变体,即循环遍历每一行的字段,
$ awk '{ for (i = 1; i <= NF; ++i) sum += $i } END { print sum }' file
168
Run Code Online (Sandbox Code Playgroud)