How do I add numbers from two txt files with Bash?












1















I have a txt file that contains some numbers like this:



1  
2
3
4
5


And I have another txt file that contains the same number of lines, but with other numbers:



6  
7
8
9
10


I want to add them together, namely 1+6, 2+7, 3+8, etc.. How do I write the script?










share|improve this question









New contributor




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
















  • 2





    Do you really want to do this "with Bash" - or are you looking for a command line solution more generally?

    – steeldriver
    3 hours ago






  • 2





    You will get a much more friendly reception and much better help here if you show what code you have tried so far and describe what problems you were having with it. Without code, your question looks like a request for free consulting and many people don't like that.

    – John1024
    3 hours ago











  • @steeldriver Not sure what you mean, but I'm trying to write a Bash script to do a series of tasks, amongst which is this one, so I need a Bash command to do this rather than any other language.

    – OhLook
    2 hours ago











  • @John1024 I tried no code 'cos I didn't know which command I should use, and that's why I came here to ask.

    – OhLook
    2 hours ago
















1















I have a txt file that contains some numbers like this:



1  
2
3
4
5


And I have another txt file that contains the same number of lines, but with other numbers:



6  
7
8
9
10


I want to add them together, namely 1+6, 2+7, 3+8, etc.. How do I write the script?










share|improve this question









New contributor




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
















  • 2





    Do you really want to do this "with Bash" - or are you looking for a command line solution more generally?

    – steeldriver
    3 hours ago






  • 2





    You will get a much more friendly reception and much better help here if you show what code you have tried so far and describe what problems you were having with it. Without code, your question looks like a request for free consulting and many people don't like that.

    – John1024
    3 hours ago











  • @steeldriver Not sure what you mean, but I'm trying to write a Bash script to do a series of tasks, amongst which is this one, so I need a Bash command to do this rather than any other language.

    – OhLook
    2 hours ago











  • @John1024 I tried no code 'cos I didn't know which command I should use, and that's why I came here to ask.

    – OhLook
    2 hours ago














1












1








1








I have a txt file that contains some numbers like this:



1  
2
3
4
5


And I have another txt file that contains the same number of lines, but with other numbers:



6  
7
8
9
10


I want to add them together, namely 1+6, 2+7, 3+8, etc.. How do I write the script?










share|improve this question









New contributor




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












I have a txt file that contains some numbers like this:



1  
2
3
4
5


And I have another txt file that contains the same number of lines, but with other numbers:



6  
7
8
9
10


I want to add them together, namely 1+6, 2+7, 3+8, etc.. How do I write the script?







bash shell-script text-processing numeric-data






share|improve this question









New contributor




OhLook 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




OhLook 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 3 hours ago









jimmij

31.6k873108




31.6k873108






New contributor




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









asked 3 hours ago









OhLookOhLook

1091




1091




New contributor




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





New contributor





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






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








  • 2





    Do you really want to do this "with Bash" - or are you looking for a command line solution more generally?

    – steeldriver
    3 hours ago






  • 2





    You will get a much more friendly reception and much better help here if you show what code you have tried so far and describe what problems you were having with it. Without code, your question looks like a request for free consulting and many people don't like that.

    – John1024
    3 hours ago











  • @steeldriver Not sure what you mean, but I'm trying to write a Bash script to do a series of tasks, amongst which is this one, so I need a Bash command to do this rather than any other language.

    – OhLook
    2 hours ago











  • @John1024 I tried no code 'cos I didn't know which command I should use, and that's why I came here to ask.

    – OhLook
    2 hours ago














  • 2





    Do you really want to do this "with Bash" - or are you looking for a command line solution more generally?

    – steeldriver
    3 hours ago






  • 2





    You will get a much more friendly reception and much better help here if you show what code you have tried so far and describe what problems you were having with it. Without code, your question looks like a request for free consulting and many people don't like that.

    – John1024
    3 hours ago











  • @steeldriver Not sure what you mean, but I'm trying to write a Bash script to do a series of tasks, amongst which is this one, so I need a Bash command to do this rather than any other language.

    – OhLook
    2 hours ago











  • @John1024 I tried no code 'cos I didn't know which command I should use, and that's why I came here to ask.

    – OhLook
    2 hours ago








2




2





Do you really want to do this "with Bash" - or are you looking for a command line solution more generally?

– steeldriver
3 hours ago





Do you really want to do this "with Bash" - or are you looking for a command line solution more generally?

– steeldriver
3 hours ago




2




2





You will get a much more friendly reception and much better help here if you show what code you have tried so far and describe what problems you were having with it. Without code, your question looks like a request for free consulting and many people don't like that.

– John1024
3 hours ago





You will get a much more friendly reception and much better help here if you show what code you have tried so far and describe what problems you were having with it. Without code, your question looks like a request for free consulting and many people don't like that.

– John1024
3 hours ago













@steeldriver Not sure what you mean, but I'm trying to write a Bash script to do a series of tasks, amongst which is this one, so I need a Bash command to do this rather than any other language.

– OhLook
2 hours ago





@steeldriver Not sure what you mean, but I'm trying to write a Bash script to do a series of tasks, amongst which is this one, so I need a Bash command to do this rather than any other language.

– OhLook
2 hours ago













@John1024 I tried no code 'cos I didn't know which command I should use, and that's why I came here to ask.

– OhLook
2 hours ago





@John1024 I tried no code 'cos I didn't know which command I should use, and that's why I came here to ask.

– OhLook
2 hours ago










4 Answers
4






active

oldest

votes


















2














This is basic task many tools can solve; paste + awk combo seems exceptionally handy:



$ paste file1 file2 | awk '$0=$1+$2'

7
9
11
13
15





share|improve this answer































    2














    Along the paste lines, but doing the math with bc:



    $ paste -d+ file1 file2 | bc
    7
    9
    11
    13
    15


    The intermediate result (before bc):



    $ paste -d+ file1 file2
    1+6
    2+7
    3+8
    4+9
    5+10


    For a more bash-centric solution, and assuming that file2 has at least as many lines as file1:



    mapfile -t file1 < file1
    mapfile -t file2 < file2
    for((i=0; i < ${#file1[@]}; i++))
    do
    printf '%dn' $((file1[i] + file2[i]))
    done





    share|improve this answer


























    • Thanks but the paste command doesn't work for me. It says (standard_in) 1: illegal character: ^M. I don't know what it means 'cos there's no ^M in my files. I'll give mapfile a go...

      – OhLook
      2 hours ago






    • 2





      That's an indication that you have a DOS/Windows format file with CRLF line endings instead of just CR. Transfer it differently or re-save it, or post-process it: unix.stackexchange.com/a/192093/117549

      – Jeff Schaller
      2 hours ago











    • I tried, but instead of what you said, the other way round works. You said I should change CRLF into CR, but CR doesn't work either. I changed it into LF, and it works.

      – OhLook
      25 mins ago



















    0














    Ok, it's a little cryptic, but also with bash arithmetic, paste and sed.



    $ # debug
    $ paste -d+ <(sed 's/(.*)/echo $((1/' file1) <(sed 's/(.*)/1))/' file2)
    echo $((1+6))
    echo $((2+7))
    echo $((3+8))
    echo $((4+9))
    echo $((5+10))

    $ eval "$(paste -d+ <(sed 's/(.*)/echo $((1/' file1) <(sed 's/(.*)/1))/' file2))"
    7
    9
    11
    13
    15





    share|improve this answer

































      0














      an awk-only solution



      awk 'getline a <"file2" {print $0 + a}' file1





      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
        });


        }
        });






        OhLook 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%2f501486%2fhow-do-i-add-numbers-from-two-txt-files-with-bash%23new-answer', 'question_page');
        }
        );

        Post as a guest















        Required, but never shown

























        4 Answers
        4






        active

        oldest

        votes








        4 Answers
        4






        active

        oldest

        votes









        active

        oldest

        votes






        active

        oldest

        votes









        2














        This is basic task many tools can solve; paste + awk combo seems exceptionally handy:



        $ paste file1 file2 | awk '$0=$1+$2'

        7
        9
        11
        13
        15





        share|improve this answer




























          2














          This is basic task many tools can solve; paste + awk combo seems exceptionally handy:



          $ paste file1 file2 | awk '$0=$1+$2'

          7
          9
          11
          13
          15





          share|improve this answer


























            2












            2








            2







            This is basic task many tools can solve; paste + awk combo seems exceptionally handy:



            $ paste file1 file2 | awk '$0=$1+$2'

            7
            9
            11
            13
            15





            share|improve this answer













            This is basic task many tools can solve; paste + awk combo seems exceptionally handy:



            $ paste file1 file2 | awk '$0=$1+$2'

            7
            9
            11
            13
            15






            share|improve this answer












            share|improve this answer



            share|improve this answer










            answered 3 hours ago









            jimmijjimmij

            31.6k873108




            31.6k873108

























                2














                Along the paste lines, but doing the math with bc:



                $ paste -d+ file1 file2 | bc
                7
                9
                11
                13
                15


                The intermediate result (before bc):



                $ paste -d+ file1 file2
                1+6
                2+7
                3+8
                4+9
                5+10


                For a more bash-centric solution, and assuming that file2 has at least as many lines as file1:



                mapfile -t file1 < file1
                mapfile -t file2 < file2
                for((i=0; i < ${#file1[@]}; i++))
                do
                printf '%dn' $((file1[i] + file2[i]))
                done





                share|improve this answer


























                • Thanks but the paste command doesn't work for me. It says (standard_in) 1: illegal character: ^M. I don't know what it means 'cos there's no ^M in my files. I'll give mapfile a go...

                  – OhLook
                  2 hours ago






                • 2





                  That's an indication that you have a DOS/Windows format file with CRLF line endings instead of just CR. Transfer it differently or re-save it, or post-process it: unix.stackexchange.com/a/192093/117549

                  – Jeff Schaller
                  2 hours ago











                • I tried, but instead of what you said, the other way round works. You said I should change CRLF into CR, but CR doesn't work either. I changed it into LF, and it works.

                  – OhLook
                  25 mins ago
















                2














                Along the paste lines, but doing the math with bc:



                $ paste -d+ file1 file2 | bc
                7
                9
                11
                13
                15


                The intermediate result (before bc):



                $ paste -d+ file1 file2
                1+6
                2+7
                3+8
                4+9
                5+10


                For a more bash-centric solution, and assuming that file2 has at least as many lines as file1:



                mapfile -t file1 < file1
                mapfile -t file2 < file2
                for((i=0; i < ${#file1[@]}; i++))
                do
                printf '%dn' $((file1[i] + file2[i]))
                done





                share|improve this answer


























                • Thanks but the paste command doesn't work for me. It says (standard_in) 1: illegal character: ^M. I don't know what it means 'cos there's no ^M in my files. I'll give mapfile a go...

                  – OhLook
                  2 hours ago






                • 2





                  That's an indication that you have a DOS/Windows format file with CRLF line endings instead of just CR. Transfer it differently or re-save it, or post-process it: unix.stackexchange.com/a/192093/117549

                  – Jeff Schaller
                  2 hours ago











                • I tried, but instead of what you said, the other way round works. You said I should change CRLF into CR, but CR doesn't work either. I changed it into LF, and it works.

                  – OhLook
                  25 mins ago














                2












                2








                2







                Along the paste lines, but doing the math with bc:



                $ paste -d+ file1 file2 | bc
                7
                9
                11
                13
                15


                The intermediate result (before bc):



                $ paste -d+ file1 file2
                1+6
                2+7
                3+8
                4+9
                5+10


                For a more bash-centric solution, and assuming that file2 has at least as many lines as file1:



                mapfile -t file1 < file1
                mapfile -t file2 < file2
                for((i=0; i < ${#file1[@]}; i++))
                do
                printf '%dn' $((file1[i] + file2[i]))
                done





                share|improve this answer















                Along the paste lines, but doing the math with bc:



                $ paste -d+ file1 file2 | bc
                7
                9
                11
                13
                15


                The intermediate result (before bc):



                $ paste -d+ file1 file2
                1+6
                2+7
                3+8
                4+9
                5+10


                For a more bash-centric solution, and assuming that file2 has at least as many lines as file1:



                mapfile -t file1 < file1
                mapfile -t file2 < file2
                for((i=0; i < ${#file1[@]}; i++))
                do
                printf '%dn' $((file1[i] + file2[i]))
                done






                share|improve this answer














                share|improve this answer



                share|improve this answer








                edited 2 hours ago

























                answered 3 hours ago









                Jeff SchallerJeff Schaller

                41.6k1056132




                41.6k1056132













                • Thanks but the paste command doesn't work for me. It says (standard_in) 1: illegal character: ^M. I don't know what it means 'cos there's no ^M in my files. I'll give mapfile a go...

                  – OhLook
                  2 hours ago






                • 2





                  That's an indication that you have a DOS/Windows format file with CRLF line endings instead of just CR. Transfer it differently or re-save it, or post-process it: unix.stackexchange.com/a/192093/117549

                  – Jeff Schaller
                  2 hours ago











                • I tried, but instead of what you said, the other way round works. You said I should change CRLF into CR, but CR doesn't work either. I changed it into LF, and it works.

                  – OhLook
                  25 mins ago



















                • Thanks but the paste command doesn't work for me. It says (standard_in) 1: illegal character: ^M. I don't know what it means 'cos there's no ^M in my files. I'll give mapfile a go...

                  – OhLook
                  2 hours ago






                • 2





                  That's an indication that you have a DOS/Windows format file with CRLF line endings instead of just CR. Transfer it differently or re-save it, or post-process it: unix.stackexchange.com/a/192093/117549

                  – Jeff Schaller
                  2 hours ago











                • I tried, but instead of what you said, the other way round works. You said I should change CRLF into CR, but CR doesn't work either. I changed it into LF, and it works.

                  – OhLook
                  25 mins ago

















                Thanks but the paste command doesn't work for me. It says (standard_in) 1: illegal character: ^M. I don't know what it means 'cos there's no ^M in my files. I'll give mapfile a go...

                – OhLook
                2 hours ago





                Thanks but the paste command doesn't work for me. It says (standard_in) 1: illegal character: ^M. I don't know what it means 'cos there's no ^M in my files. I'll give mapfile a go...

                – OhLook
                2 hours ago




                2




                2





                That's an indication that you have a DOS/Windows format file with CRLF line endings instead of just CR. Transfer it differently or re-save it, or post-process it: unix.stackexchange.com/a/192093/117549

                – Jeff Schaller
                2 hours ago





                That's an indication that you have a DOS/Windows format file with CRLF line endings instead of just CR. Transfer it differently or re-save it, or post-process it: unix.stackexchange.com/a/192093/117549

                – Jeff Schaller
                2 hours ago













                I tried, but instead of what you said, the other way round works. You said I should change CRLF into CR, but CR doesn't work either. I changed it into LF, and it works.

                – OhLook
                25 mins ago





                I tried, but instead of what you said, the other way round works. You said I should change CRLF into CR, but CR doesn't work either. I changed it into LF, and it works.

                – OhLook
                25 mins ago











                0














                Ok, it's a little cryptic, but also with bash arithmetic, paste and sed.



                $ # debug
                $ paste -d+ <(sed 's/(.*)/echo $((1/' file1) <(sed 's/(.*)/1))/' file2)
                echo $((1+6))
                echo $((2+7))
                echo $((3+8))
                echo $((4+9))
                echo $((5+10))

                $ eval "$(paste -d+ <(sed 's/(.*)/echo $((1/' file1) <(sed 's/(.*)/1))/' file2))"
                7
                9
                11
                13
                15





                share|improve this answer






























                  0














                  Ok, it's a little cryptic, but also with bash arithmetic, paste and sed.



                  $ # debug
                  $ paste -d+ <(sed 's/(.*)/echo $((1/' file1) <(sed 's/(.*)/1))/' file2)
                  echo $((1+6))
                  echo $((2+7))
                  echo $((3+8))
                  echo $((4+9))
                  echo $((5+10))

                  $ eval "$(paste -d+ <(sed 's/(.*)/echo $((1/' file1) <(sed 's/(.*)/1))/' file2))"
                  7
                  9
                  11
                  13
                  15





                  share|improve this answer




























                    0












                    0








                    0







                    Ok, it's a little cryptic, but also with bash arithmetic, paste and sed.



                    $ # debug
                    $ paste -d+ <(sed 's/(.*)/echo $((1/' file1) <(sed 's/(.*)/1))/' file2)
                    echo $((1+6))
                    echo $((2+7))
                    echo $((3+8))
                    echo $((4+9))
                    echo $((5+10))

                    $ eval "$(paste -d+ <(sed 's/(.*)/echo $((1/' file1) <(sed 's/(.*)/1))/' file2))"
                    7
                    9
                    11
                    13
                    15





                    share|improve this answer















                    Ok, it's a little cryptic, but also with bash arithmetic, paste and sed.



                    $ # debug
                    $ paste -d+ <(sed 's/(.*)/echo $((1/' file1) <(sed 's/(.*)/1))/' file2)
                    echo $((1+6))
                    echo $((2+7))
                    echo $((3+8))
                    echo $((4+9))
                    echo $((5+10))

                    $ eval "$(paste -d+ <(sed 's/(.*)/echo $((1/' file1) <(sed 's/(.*)/1))/' file2))"
                    7
                    9
                    11
                    13
                    15






                    share|improve this answer














                    share|improve this answer



                    share|improve this answer








                    edited 1 hour ago

























                    answered 2 hours ago









                    FreddyFreddy

                    3498




                    3498























                        0














                        an awk-only solution



                        awk 'getline a <"file2" {print $0 + a}' file1





                        share|improve this answer






























                          0














                          an awk-only solution



                          awk 'getline a <"file2" {print $0 + a}' file1





                          share|improve this answer




























                            0












                            0








                            0







                            an awk-only solution



                            awk 'getline a <"file2" {print $0 + a}' file1





                            share|improve this answer















                            an awk-only solution



                            awk 'getline a <"file2" {print $0 + a}' file1






                            share|improve this answer














                            share|improve this answer



                            share|improve this answer








                            edited 1 hour ago

























                            answered 2 hours ago









                            iruvariruvar

                            11.9k62960




                            11.9k62960






















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










                                draft saved

                                draft discarded


















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













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












                                OhLook 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%2f501486%2fhow-do-i-add-numbers-from-two-txt-files-with-bash%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

                                How to make a Squid Proxy server?

                                Is this a new Fibonacci Identity?

                                19世紀