AWK how to count sum
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.
awk
add a comment |
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.
awk
add a comment |
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.
awk
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.
awk
awk
edited Jan 17 at 8:11
Rui F Ribeiro
39.9k1479135
39.9k1479135
asked Jan 17 at 7:29
user331922user331922
161
161
add a comment |
add a comment |
3 Answers
3
active
oldest
votes
Something like can do the work:
awk 'BEGIN {sum=0} {for (i = 1; i <= NF; i++) sum+=$i} END {print sum}' FileInput.txt
2
Not strictly required to initialize the sum, but good for maintainability.
– glenn jackman
Jan 17 at 20:23
add a comment |
The issue with your code is twofold:
- It does not actually make use of
awkin the way one usually does. It explicitly loops over the lines of the file in aBEGINblock. This is not the idiomatic way one usually writesawkprograms, which is to supply (optional) patterns or conditions for blocks to be executed for each input record (line). - Since the input consists of records (by default single lines) with more than one number, you would have to treat these records in such a way that the individual numbers are summed up. In other words, you can't add
20 3tosum, but would have to split that up into20and3first.
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
add a comment |
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'
Or something like|awk '{sum+=$1} END {print sum}'
– Romeo Ninov
Jan 17 at 20:31
add a comment |
Your Answer
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "106"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f494981%2fawk-how-to-count-sum%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
Something like can do the work:
awk 'BEGIN {sum=0} {for (i = 1; i <= NF; i++) sum+=$i} END {print sum}' FileInput.txt
2
Not strictly required to initialize the sum, but good for maintainability.
– glenn jackman
Jan 17 at 20:23
add a comment |
Something like can do the work:
awk 'BEGIN {sum=0} {for (i = 1; i <= NF; i++) sum+=$i} END {print sum}' FileInput.txt
2
Not strictly required to initialize the sum, but good for maintainability.
– glenn jackman
Jan 17 at 20:23
add a comment |
Something like can do the work:
awk 'BEGIN {sum=0} {for (i = 1; i <= NF; i++) sum+=$i} END {print sum}' FileInput.txt
Something like can do the work:
awk 'BEGIN {sum=0} {for (i = 1; i <= NF; i++) sum+=$i} END {print sum}' FileInput.txt
answered Jan 17 at 7:43
Romeo NinovRomeo Ninov
6,03332028
6,03332028
2
Not strictly required to initialize the sum, but good for maintainability.
– glenn jackman
Jan 17 at 20:23
add a comment |
2
Not strictly required to initialize the sum, but good for maintainability.
– glenn jackman
Jan 17 at 20:23
2
2
Not strictly required to initialize the sum, but good for maintainability.
– glenn jackman
Jan 17 at 20:23
Not strictly required to initialize the sum, but good for maintainability.
– glenn jackman
Jan 17 at 20:23
add a comment |
The issue with your code is twofold:
- It does not actually make use of
awkin the way one usually does. It explicitly loops over the lines of the file in aBEGINblock. This is not the idiomatic way one usually writesawkprograms, which is to supply (optional) patterns or conditions for blocks to be executed for each input record (line). - Since the input consists of records (by default single lines) with more than one number, you would have to treat these records in such a way that the individual numbers are summed up. In other words, you can't add
20 3tosum, but would have to split that up into20and3first.
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
add a comment |
The issue with your code is twofold:
- It does not actually make use of
awkin the way one usually does. It explicitly loops over the lines of the file in aBEGINblock. This is not the idiomatic way one usually writesawkprograms, which is to supply (optional) patterns or conditions for blocks to be executed for each input record (line). - Since the input consists of records (by default single lines) with more than one number, you would have to treat these records in such a way that the individual numbers are summed up. In other words, you can't add
20 3tosum, but would have to split that up into20and3first.
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
add a comment |
The issue with your code is twofold:
- It does not actually make use of
awkin the way one usually does. It explicitly loops over the lines of the file in aBEGINblock. This is not the idiomatic way one usually writesawkprograms, which is to supply (optional) patterns or conditions for blocks to be executed for each input record (line). - Since the input consists of records (by default single lines) with more than one number, you would have to treat these records in such a way that the individual numbers are summed up. In other words, you can't add
20 3tosum, but would have to split that up into20and3first.
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
The issue with your code is twofold:
- It does not actually make use of
awkin the way one usually does. It explicitly loops over the lines of the file in aBEGINblock. This is not the idiomatic way one usually writesawkprograms, which is to supply (optional) patterns or conditions for blocks to be executed for each input record (line). - Since the input consists of records (by default single lines) with more than one number, you would have to treat these records in such a way that the individual numbers are summed up. In other words, you can't add
20 3tosum, but would have to split that up into20and3first.
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
edited Jan 17 at 14:07
answered Jan 17 at 7:47
KusalanandaKusalananda
128k16241399
128k16241399
add a comment |
add a comment |
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'
Or something like|awk '{sum+=$1} END {print sum}'
– Romeo Ninov
Jan 17 at 20:31
add a comment |
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'
Or something like|awk '{sum+=$1} END {print sum}'
– Romeo Ninov
Jan 17 at 20:31
add a comment |
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'
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'
answered Jan 17 at 20:21
glenn jackmanglenn jackman
51.4k571111
51.4k571111
Or something like|awk '{sum+=$1} END {print sum}'
– Romeo Ninov
Jan 17 at 20:31
add a comment |
Or something like|awk '{sum+=$1} END {print sum}'
– Romeo Ninov
Jan 17 at 20:31
Or something like
|awk '{sum+=$1} END {print sum}'– Romeo Ninov
Jan 17 at 20:31
Or something like
|awk '{sum+=$1} END {print sum}'– Romeo Ninov
Jan 17 at 20:31
add a comment |
Thanks for contributing an answer to Unix & Linux Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f494981%2fawk-how-to-count-sum%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown