input file (FileInput.txt):
10
20 3
100 5 3
27
this is my awk script:
BEGIN{
while((getline line < "FileInput.txt") > 0) {
}
how can i count sum? I tried sum+=line however it sums only the first column.
Something like can do the work:
awk 'BEGIN {sum=0} {for (i = 1; i <= NF; i++) sum+=$i} END {print sum}' FileInput.txt
The issue with your code is twofold:
awk in the way one usually does. It explicitly loops over the lines of the file in a BEGIN block. This is not the idiomatic way one usually writes awk programs, which is to supply (optional) patterns or conditions for blocks to be executed for each input record (line).20 3 to sum, but would have to split that up into 20 and 3 first.With GNU awk or mawk, we may set the record separator, RS, to a regular expression that matches any sequence of whitespace characters instead of the default newline. This make awk read the file as a collection of whitespace-separated single field records. Summing these and printing the sum at the end is then trivial:
$ awk -v RS='[[:space:]]+' '{ sum += $1 } END { print sum }' FileInput.txt
168
Altenatively,
$ awk 'BEGIN { RS = "[[:space:]]+" } { sum += $1 } END { print sum }' FileInput.txt
168
Or, you can do some variant on what Romeo Ninov shows, which is to loop over the fields of each line,
$ awk '{ for (i = 1; i <= NF; ++i) sum += $i } END { print sum }' file
168
You could transform your file so you have one number per line:
tr -s '[:blank:]' '\n' < FileInput.txt
Then pick a solution from https://stackoverflow.com/q/2702564/7552 to sum them. For example
tr -s '[:blank:]' '\n' < FileInput.txt | perl -nle '$sum += $_ } END { print $sum'
|awk '{sum+=$1} END {print sum}'