AWK how to count sum












2















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.










share|improve this question









New contributor




user331922 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.

























    2















    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.










    share|improve this question









    New contributor




    user331922 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
    Check out our Code of Conduct.























      2












      2








      2








      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.










      share|improve this question









      New contributor




      user331922 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.












      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






      share|improve this question









      New contributor




      user331922 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.











      share|improve this question









      New contributor




      user331922 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.









      share|improve this question




      share|improve this question








      edited 6 hours ago









      Rui F Ribeiro

      39.5k1479132




      39.5k1479132






      New contributor




      user331922 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.









      asked 6 hours ago









      user331922user331922

      111




      111




      New contributor




      user331922 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.





      New contributor





      user331922 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.






      user331922 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.






















          2 Answers
          2






          active

          oldest

          votes


















          5














          Something like can do the work:



          awk 'BEGIN {sum=0} {for (i = 1; i <= NF; i++) sum+=$i} END {print sum}' FileInput.txt





          share|improve this answer































            3














            The issue with your code is twofold:




            1. It does not actually make use of 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).

            2. 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 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





            share|improve this answer

























              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.










              draft saved

              draft discarded


















              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









              5














              Something like can do the work:



              awk 'BEGIN {sum=0} {for (i = 1; i <= NF; i++) sum+=$i} END {print sum}' FileInput.txt





              share|improve this answer




























                5














                Something like can do the work:



                awk 'BEGIN {sum=0} {for (i = 1; i <= NF; i++) sum+=$i} END {print sum}' FileInput.txt





                share|improve this answer


























                  5












                  5








                  5







                  Something like can do the work:



                  awk 'BEGIN {sum=0} {for (i = 1; i <= NF; i++) sum+=$i} END {print sum}' FileInput.txt





                  share|improve this answer













                  Something like can do the work:



                  awk 'BEGIN {sum=0} {for (i = 1; i <= NF; i++) sum+=$i} END {print sum}' FileInput.txt






                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered 6 hours ago









                  Romeo NinovRomeo Ninov

                  5,70831928




                  5,70831928

























                      3














                      The issue with your code is twofold:




                      1. It does not actually make use of 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).

                      2. 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 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





                      share|improve this answer






























                        3














                        The issue with your code is twofold:




                        1. It does not actually make use of 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).

                        2. 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 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





                        share|improve this answer




























                          3












                          3








                          3







                          The issue with your code is twofold:




                          1. It does not actually make use of 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).

                          2. 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 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





                          share|improve this answer















                          The issue with your code is twofold:




                          1. It does not actually make use of 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).

                          2. 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 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






                          share|improve this answer














                          share|improve this answer



                          share|improve this answer








                          edited 7 mins ago

























                          answered 6 hours ago









                          KusalanandaKusalananda

                          124k16234386




                          124k16234386






















                              user331922 is a new contributor. Be nice, and check out our Code of Conduct.










                              draft saved

                              draft discarded


















                              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.




                              draft saved


                              draft discarded














                              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





















































                              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







                              Popular posts from this blog

                              Polycentropodidae

                              Magento 2 Error message: Invalid state change requested

                              Paulmy