How can I extract records with a column in common?











up vote
4
down vote

favorite












I have two tables with different numbers of columns and rows. I want to find rows using a common column (column B is in common). Here is an example. Could you please help?



file1.txt



A  B    C   D
a b c d
i ii iii iV
* ** # ##


file2.txt



E  B  
f ff
h b
g gg
k ii


output:



A  B    C   D  E
a b c d h
i ii iii iV k









share|improve this question




















  • 2




    Could you explain what you are doing in a bit more detail please? Why is the last line of file1 not in the output? And why is column B unchanged in the output while column E is added?
    – terdon
    1 hour ago










  • @terdon: I have two tables including some parameters of many galaxies. Assume table one include "mass" , "name","color" and "distance" of galaxies and table 2 include "velocity" and "name". . some galaxies are in common so have same name (column B). Now, I want to have all parameters for this galaxies in one table.
    – Negar
    19 mins ago















up vote
4
down vote

favorite












I have two tables with different numbers of columns and rows. I want to find rows using a common column (column B is in common). Here is an example. Could you please help?



file1.txt



A  B    C   D
a b c d
i ii iii iV
* ** # ##


file2.txt



E  B  
f ff
h b
g gg
k ii


output:



A  B    C   D  E
a b c d h
i ii iii iV k









share|improve this question




















  • 2




    Could you explain what you are doing in a bit more detail please? Why is the last line of file1 not in the output? And why is column B unchanged in the output while column E is added?
    – terdon
    1 hour ago










  • @terdon: I have two tables including some parameters of many galaxies. Assume table one include "mass" , "name","color" and "distance" of galaxies and table 2 include "velocity" and "name". . some galaxies are in common so have same name (column B). Now, I want to have all parameters for this galaxies in one table.
    – Negar
    19 mins ago













up vote
4
down vote

favorite









up vote
4
down vote

favorite











I have two tables with different numbers of columns and rows. I want to find rows using a common column (column B is in common). Here is an example. Could you please help?



file1.txt



A  B    C   D
a b c d
i ii iii iV
* ** # ##


file2.txt



E  B  
f ff
h b
g gg
k ii


output:



A  B    C   D  E
a b c d h
i ii iii iV k









share|improve this question















I have two tables with different numbers of columns and rows. I want to find rows using a common column (column B is in common). Here is an example. Could you please help?



file1.txt



A  B    C   D
a b c d
i ii iii iV
* ** # ##


file2.txt



E  B  
f ff
h b
g gg
k ii


output:



A  B    C   D  E
a b c d h
i ii iii iV k






command-line text-processing






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited 1 hour ago

























asked 1 hour ago









Negar

364




364








  • 2




    Could you explain what you are doing in a bit more detail please? Why is the last line of file1 not in the output? And why is column B unchanged in the output while column E is added?
    – terdon
    1 hour ago










  • @terdon: I have two tables including some parameters of many galaxies. Assume table one include "mass" , "name","color" and "distance" of galaxies and table 2 include "velocity" and "name". . some galaxies are in common so have same name (column B). Now, I want to have all parameters for this galaxies in one table.
    – Negar
    19 mins ago














  • 2




    Could you explain what you are doing in a bit more detail please? Why is the last line of file1 not in the output? And why is column B unchanged in the output while column E is added?
    – terdon
    1 hour ago










  • @terdon: I have two tables including some parameters of many galaxies. Assume table one include "mass" , "name","color" and "distance" of galaxies and table 2 include "velocity" and "name". . some galaxies are in common so have same name (column B). Now, I want to have all parameters for this galaxies in one table.
    – Negar
    19 mins ago








2




2




Could you explain what you are doing in a bit more detail please? Why is the last line of file1 not in the output? And why is column B unchanged in the output while column E is added?
– terdon
1 hour ago




Could you explain what you are doing in a bit more detail please? Why is the last line of file1 not in the output? And why is column B unchanged in the output while column E is added?
– terdon
1 hour ago












@terdon: I have two tables including some parameters of many galaxies. Assume table one include "mass" , "name","color" and "distance" of galaxies and table 2 include "velocity" and "name". . some galaxies are in common so have same name (column B). Now, I want to have all parameters for this galaxies in one table.
– Negar
19 mins ago




@terdon: I have two tables including some parameters of many galaxies. Assume table one include "mass" , "name","color" and "distance" of galaxies and table 2 include "velocity" and "name". . some galaxies are in common so have same name (column B). Now, I want to have all parameters for this galaxies in one table.
– Negar
19 mins ago










1 Answer
1






active

oldest

votes

















up vote
3
down vote













You can do this kind of thing by building a hash / associative array / lookup table e.g. using Awk:



$ awk 'NR==FNR{B[$2]=$1; next} $2 in B {print $0,B[$2]}' file2.txt file1.txt
A B C D E
a b c d h
i ii iii iV k


There's also the join command - but that requires inputs to be sorted on the common field.






share|improve this answer





















    Your Answer








    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "89"
    };
    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',
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    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
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2faskubuntu.com%2fquestions%2f1102529%2fhow-can-i-extract-records-with-a-column-in-common%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes








    up vote
    3
    down vote













    You can do this kind of thing by building a hash / associative array / lookup table e.g. using Awk:



    $ awk 'NR==FNR{B[$2]=$1; next} $2 in B {print $0,B[$2]}' file2.txt file1.txt
    A B C D E
    a b c d h
    i ii iii iV k


    There's also the join command - but that requires inputs to be sorted on the common field.






    share|improve this answer

























      up vote
      3
      down vote













      You can do this kind of thing by building a hash / associative array / lookup table e.g. using Awk:



      $ awk 'NR==FNR{B[$2]=$1; next} $2 in B {print $0,B[$2]}' file2.txt file1.txt
      A B C D E
      a b c d h
      i ii iii iV k


      There's also the join command - but that requires inputs to be sorted on the common field.






      share|improve this answer























        up vote
        3
        down vote










        up vote
        3
        down vote









        You can do this kind of thing by building a hash / associative array / lookup table e.g. using Awk:



        $ awk 'NR==FNR{B[$2]=$1; next} $2 in B {print $0,B[$2]}' file2.txt file1.txt
        A B C D E
        a b c d h
        i ii iii iV k


        There's also the join command - but that requires inputs to be sorted on the common field.






        share|improve this answer












        You can do this kind of thing by building a hash / associative array / lookup table e.g. using Awk:



        $ awk 'NR==FNR{B[$2]=$1; next} $2 in B {print $0,B[$2]}' file2.txt file1.txt
        A B C D E
        a b c d h
        i ii iii iV k


        There's also the join command - but that requires inputs to be sorted on the common field.







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered 1 hour ago









        steeldriver

        65.3k11104176




        65.3k11104176






























            draft saved

            draft discarded




















































            Thanks for contributing an answer to Ask Ubuntu!


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





            Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


            Please pay close attention to the following guidance:


            • 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%2faskubuntu.com%2fquestions%2f1102529%2fhow-can-i-extract-records-with-a-column-in-common%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

            flock() on closed filehandle LOCK_FILE at /usr/bin/apt-mirror

            Mangá

            Eduardo VII do Reino Unido