xargs vertical alignment of output












0














I want to extract certain values from files in many subdirectories. I have a working code that does this:



for i in */; do grep "free energy" "$i"filename | tail -1 | xargs -I{} echo "$i: {}" >> output.txt; done



the tail -1 command gives me the last output from each file (which I want) and the xargs construction prepends the folder name so I know which line belongs to which system. The output.txt looks like this:



Cr/: free energy TOTEN = -18.87487583 eV
Hf/: free energy TOTEN = -18.76845679 eV
N/: free energy TOTEN = -15.90748159 eV
Nb/: free energy TOTEN = -20.38801759 eV
Ti/: free energy TOTEN = -14.92233353 eV
TiN/: free energy TOTEN = -78.73147048 eV



Where Cr, Hf, N, TiN and so on are the folder names. My problem is that the values on the right side are not aligned properly, because the folders have different character lengths. Changing the folder names is out of the question so I want the xargs command to always use a certain amount of spaces (like 10) - at least as a minimum - so the vertical alignment is proper. The result should look something like this:



Cr/ : free energy TOTEN = -18.87487583 eV
Hf/ : free energy TOTEN = -18.76845679 eV
N/ : free energy TOTEN = -15.90748159 eV
Nb/ : free energy TOTEN = -20.38801759 eV
Ti/ : free energy TOTEN = -14.92233353 eV
TiN/: free energy TOTEN = -78.73147048 eV



or this



Cr /: free energy TOTEN = -18.87487583 eV
Hf /: free energy TOTEN = -18.76845679 eV
N /: free energy TOTEN = -15.90748159 eV
Nb /: free energy TOTEN = -20.38801759 eV
Ti /: free energy TOTEN = -14.92233353 eV
TiN/: free energy TOTEN = -78.73147048 eV



so that I can easily copy all the values at once with Alt + Leftclick.










share|improve this question


















  • 1




    Pipe through column command.
    – Ipor Sircer
    Dec 11 at 11:05


















0














I want to extract certain values from files in many subdirectories. I have a working code that does this:



for i in */; do grep "free energy" "$i"filename | tail -1 | xargs -I{} echo "$i: {}" >> output.txt; done



the tail -1 command gives me the last output from each file (which I want) and the xargs construction prepends the folder name so I know which line belongs to which system. The output.txt looks like this:



Cr/: free energy TOTEN = -18.87487583 eV
Hf/: free energy TOTEN = -18.76845679 eV
N/: free energy TOTEN = -15.90748159 eV
Nb/: free energy TOTEN = -20.38801759 eV
Ti/: free energy TOTEN = -14.92233353 eV
TiN/: free energy TOTEN = -78.73147048 eV



Where Cr, Hf, N, TiN and so on are the folder names. My problem is that the values on the right side are not aligned properly, because the folders have different character lengths. Changing the folder names is out of the question so I want the xargs command to always use a certain amount of spaces (like 10) - at least as a minimum - so the vertical alignment is proper. The result should look something like this:



Cr/ : free energy TOTEN = -18.87487583 eV
Hf/ : free energy TOTEN = -18.76845679 eV
N/ : free energy TOTEN = -15.90748159 eV
Nb/ : free energy TOTEN = -20.38801759 eV
Ti/ : free energy TOTEN = -14.92233353 eV
TiN/: free energy TOTEN = -78.73147048 eV



or this



Cr /: free energy TOTEN = -18.87487583 eV
Hf /: free energy TOTEN = -18.76845679 eV
N /: free energy TOTEN = -15.90748159 eV
Nb /: free energy TOTEN = -20.38801759 eV
Ti /: free energy TOTEN = -14.92233353 eV
TiN/: free energy TOTEN = -78.73147048 eV



so that I can easily copy all the values at once with Alt + Leftclick.










share|improve this question


















  • 1




    Pipe through column command.
    – Ipor Sircer
    Dec 11 at 11:05
















0












0








0







I want to extract certain values from files in many subdirectories. I have a working code that does this:



for i in */; do grep "free energy" "$i"filename | tail -1 | xargs -I{} echo "$i: {}" >> output.txt; done



the tail -1 command gives me the last output from each file (which I want) and the xargs construction prepends the folder name so I know which line belongs to which system. The output.txt looks like this:



Cr/: free energy TOTEN = -18.87487583 eV
Hf/: free energy TOTEN = -18.76845679 eV
N/: free energy TOTEN = -15.90748159 eV
Nb/: free energy TOTEN = -20.38801759 eV
Ti/: free energy TOTEN = -14.92233353 eV
TiN/: free energy TOTEN = -78.73147048 eV



Where Cr, Hf, N, TiN and so on are the folder names. My problem is that the values on the right side are not aligned properly, because the folders have different character lengths. Changing the folder names is out of the question so I want the xargs command to always use a certain amount of spaces (like 10) - at least as a minimum - so the vertical alignment is proper. The result should look something like this:



Cr/ : free energy TOTEN = -18.87487583 eV
Hf/ : free energy TOTEN = -18.76845679 eV
N/ : free energy TOTEN = -15.90748159 eV
Nb/ : free energy TOTEN = -20.38801759 eV
Ti/ : free energy TOTEN = -14.92233353 eV
TiN/: free energy TOTEN = -78.73147048 eV



or this



Cr /: free energy TOTEN = -18.87487583 eV
Hf /: free energy TOTEN = -18.76845679 eV
N /: free energy TOTEN = -15.90748159 eV
Nb /: free energy TOTEN = -20.38801759 eV
Ti /: free energy TOTEN = -14.92233353 eV
TiN/: free energy TOTEN = -78.73147048 eV



so that I can easily copy all the values at once with Alt + Leftclick.










share|improve this question













I want to extract certain values from files in many subdirectories. I have a working code that does this:



for i in */; do grep "free energy" "$i"filename | tail -1 | xargs -I{} echo "$i: {}" >> output.txt; done



the tail -1 command gives me the last output from each file (which I want) and the xargs construction prepends the folder name so I know which line belongs to which system. The output.txt looks like this:



Cr/: free energy TOTEN = -18.87487583 eV
Hf/: free energy TOTEN = -18.76845679 eV
N/: free energy TOTEN = -15.90748159 eV
Nb/: free energy TOTEN = -20.38801759 eV
Ti/: free energy TOTEN = -14.92233353 eV
TiN/: free energy TOTEN = -78.73147048 eV



Where Cr, Hf, N, TiN and so on are the folder names. My problem is that the values on the right side are not aligned properly, because the folders have different character lengths. Changing the folder names is out of the question so I want the xargs command to always use a certain amount of spaces (like 10) - at least as a minimum - so the vertical alignment is proper. The result should look something like this:



Cr/ : free energy TOTEN = -18.87487583 eV
Hf/ : free energy TOTEN = -18.76845679 eV
N/ : free energy TOTEN = -15.90748159 eV
Nb/ : free energy TOTEN = -20.38801759 eV
Ti/ : free energy TOTEN = -14.92233353 eV
TiN/: free energy TOTEN = -78.73147048 eV



or this



Cr /: free energy TOTEN = -18.87487583 eV
Hf /: free energy TOTEN = -18.76845679 eV
N /: free energy TOTEN = -15.90748159 eV
Nb /: free energy TOTEN = -20.38801759 eV
Ti /: free energy TOTEN = -14.92233353 eV
TiN/: free energy TOTEN = -78.73147048 eV



so that I can easily copy all the values at once with Alt + Leftclick.







grep xargs






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Dec 11 at 10:56









Andreas

253




253








  • 1




    Pipe through column command.
    – Ipor Sircer
    Dec 11 at 11:05
















  • 1




    Pipe through column command.
    – Ipor Sircer
    Dec 11 at 11:05










1




1




Pipe through column command.
– Ipor Sircer
Dec 11 at 11:05






Pipe through column command.
– Ipor Sircer
Dec 11 at 11:05












1 Answer
1






active

oldest

votes


















0














printf is what you want



xargs -I{} printf "%-10s: %sn" "$i" "{}"


Note that this will use /usr/bin/printf, not the shell's builtin printf.






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


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f487312%2fxargs-vertical-alignment-of-output%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









    0














    printf is what you want



    xargs -I{} printf "%-10s: %sn" "$i" "{}"


    Note that this will use /usr/bin/printf, not the shell's builtin printf.






    share|improve this answer


























      0














      printf is what you want



      xargs -I{} printf "%-10s: %sn" "$i" "{}"


      Note that this will use /usr/bin/printf, not the shell's builtin printf.






      share|improve this answer
























        0












        0








        0






        printf is what you want



        xargs -I{} printf "%-10s: %sn" "$i" "{}"


        Note that this will use /usr/bin/printf, not the shell's builtin printf.






        share|improve this answer












        printf is what you want



        xargs -I{} printf "%-10s: %sn" "$i" "{}"


        Note that this will use /usr/bin/printf, not the shell's builtin printf.







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Dec 11 at 18:24









        glenn jackman

        50.1k569106




        50.1k569106






























            draft saved

            draft discarded




















































            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.





            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%2funix.stackexchange.com%2fquestions%2f487312%2fxargs-vertical-alignment-of-output%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

            Morgemoulin

            Scott Moir

            Souastre