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
New contributor
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
New contributor
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
New contributor
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
New contributor
New contributor
edited 6 hours ago
Rui F Ribeiro
39.5k1479132
39.5k1479132
New contributor
asked 6 hours ago
user331922user331922
111
111
New contributor
New contributor
add a comment |
add a comment |
2 Answers
2
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
add a comment |
The issue with your code is twofold:
- It does not actually make use of
awk
in the way one usually does. It explicitly loops over the lines of the file in aBEGIN
block. This is not the idiomatic way one usually writesawk
programs, 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 3
tosum
, but would have to split that up into20
and3
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
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
});
}
});
user331922 is a new contributor. Be nice, and check out our Code of Conduct.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e) {
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom)) {
StackExchange.using('gps', function() { StackExchange.gps.track('embedded_signup_form.view', { location: 'question_page' }); });
$window.unbind('scroll', onScroll);
}
};
$window.on('scroll', onScroll);
});
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
2 Answers
2
active
oldest
votes
2 Answers
2
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
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
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 6 hours ago
Romeo NinovRomeo Ninov
5,70831928
5,70831928
add a comment |
add a comment |
The issue with your code is twofold:
- It does not actually make use of
awk
in the way one usually does. It explicitly loops over the lines of the file in aBEGIN
block. This is not the idiomatic way one usually writesawk
programs, 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 3
tosum
, but would have to split that up into20
and3
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
add a comment |
The issue with your code is twofold:
- It does not actually make use of
awk
in the way one usually does. It explicitly loops over the lines of the file in aBEGIN
block. This is not the idiomatic way one usually writesawk
programs, 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 3
tosum
, but would have to split that up into20
and3
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
add a comment |
The issue with your code is twofold:
- It does not actually make use of
awk
in the way one usually does. It explicitly loops over the lines of the file in aBEGIN
block. This is not the idiomatic way one usually writesawk
programs, 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 3
tosum
, but would have to split that up into20
and3
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
The issue with your code is twofold:
- It does not actually make use of
awk
in the way one usually does. It explicitly loops over the lines of the file in aBEGIN
block. This is not the idiomatic way one usually writesawk
programs, 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 3
tosum
, but would have to split that up into20
and3
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
edited 7 mins ago
answered 6 hours ago
KusalanandaKusalananda
124k16234386
124k16234386
add a comment |
add a comment |
user331922 is a new contributor. Be nice, and check out our Code of Conduct.
user331922 is a new contributor. Be nice, and check out our Code of Conduct.
user331922 is a new contributor. Be nice, and check out our Code of Conduct.
user331922 is a new contributor. Be nice, and check out our Code of Conduct.
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');
var $window = $(window),
onScroll = function(e) {
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom)) {
StackExchange.using('gps', function() { StackExchange.gps.track('embedded_signup_form.view', { location: 'question_page' }); });
$window.unbind('scroll', onScroll);
}
};
$window.on('scroll', onScroll);
});
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');
var $window = $(window),
onScroll = function(e) {
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom)) {
StackExchange.using('gps', function() { StackExchange.gps.track('embedded_signup_form.view', { location: 'question_page' }); });
$window.unbind('scroll', onScroll);
}
};
$window.on('scroll', onScroll);
});
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');
var $window = $(window),
onScroll = function(e) {
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom)) {
StackExchange.using('gps', function() { StackExchange.gps.track('embedded_signup_form.view', { location: 'question_page' }); });
$window.unbind('scroll', onScroll);
}
};
$window.on('scroll', onScroll);
});
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');
var $window = $(window),
onScroll = function(e) {
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom)) {
StackExchange.using('gps', function() { StackExchange.gps.track('embedded_signup_form.view', { location: 'question_page' }); });
$window.unbind('scroll', onScroll);
}
};
$window.on('scroll', onScroll);
});
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