Aliased pipeline using head and cutHow to use ' in alias?Bash newline doesn't printTail multiple files and...

STM32 PWM problem

Are there any spells or magic items that allow for making of ‘logic gates or wires’?

What is the reason behind this musical reference to Pinocchio in the Close Encounters main theme?

How do I add a strong "onion flavor" to the biryani (in restaurant style)?

Multiple null checks in Java 8

What is formjacking?

Is it common to refer to someone as "Prof. Dr. [LastName]"?

Can I combine Divination spells with Arcane Eye?

Was the Soviet N1 really capable of sending 9.6 GB/s of telemetry?

Why is quixotic not Quixotic (a proper adjective)?

How bad is a Computer Science course that doesn't teach Design Patterns?

Are encryption algorithms with fixed-point free permutations inherently flawed?

How do I handle a blinded enemy which wants to attack someone it's sure is there?

When distributing a Linux kernel driver as source code, what's the difference between Proprietary and GPL license?

Translation for threshold (figuratively)

Can you wish for more wishes from an Efreeti bound to service via an Efreeti Bottle?

How do I avoid the "chosen hero" feeling?

How do I write a maintainable, fast, compile-time bit-mask in C++?

Does the Resurrection spell consume material components if the target isn’t willing to be resurrected?

Boss asked me to sign a resignation paper without a date on it along with my new contract

Are all power cords made equal?

Why Is Image Exporting At Larger Dimensions Than In Illustrator File?

What does "don't have a baby" imply or mean in this sentence?

How can a kingdom keep the secret of a missing monarch from the public?



Aliased pipeline using head and cut


How to use ' in alias?Bash newline doesn't printTail multiple files and output as additional column with 'find' resultsHow to document my custom bash functions and aliases?aliasing a slightly complex script on Linux/bashHow to escape single quotes correctly creating an aliasWhy doesn't this tee with process substitution produce the 1st and chosen lines?zsh alias with linefeeds, commas and quotesUsing a bash alias or function with environment variables on multiple linesSwapping STD{OUT,ERR} in a pipeline multiple times













4















I'd like to create an alias to have a quick view of the table format files with comma separator:



alias thead='head | cut -d, -f1- | column -s, -t'


Later using it like this



thead file.csv


However, it doesn't work. What would be the correct syntax?










share|improve this question









New contributor




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

























    4















    I'd like to create an alias to have a quick view of the table format files with comma separator:



    alias thead='head | cut -d, -f1- | column -s, -t'


    Later using it like this



    thead file.csv


    However, it doesn't work. What would be the correct syntax?










    share|improve this question









    New contributor




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























      4












      4








      4








      I'd like to create an alias to have a quick view of the table format files with comma separator:



      alias thead='head | cut -d, -f1- | column -s, -t'


      Later using it like this



      thead file.csv


      However, it doesn't work. What would be the correct syntax?










      share|improve this question









      New contributor




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












      I'd like to create an alias to have a quick view of the table format files with comma separator:



      alias thead='head | cut -d, -f1- | column -s, -t'


      Later using it like this



      thead file.csv


      However, it doesn't work. What would be the correct syntax?







      bash alias






      share|improve this question









      New contributor




      Max Li 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




      Max Li 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 1 hour ago









      Kusalananda

      131k17250409




      131k17250409






      New contributor




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









      asked 2 hours ago









      Max LiMax Li

      1234




      1234




      New contributor




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





      New contributor





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






      Max Li 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


















          6














          For anything more advanced than a simple command, use a shell function instead of an alias:



          thead () {
          head "$1" | cut -d, -f1- | column -s, -t
          }


          This shell function would run head on its first argument, and then send the result through the pipeline (although, since the cut gets all columns due to -f 1-, this part can probably be removed; I'm leaving it in here as you had it in your original pipeline).



          Or,



          thead () {
          head "$2" | cut -d "$1" -f1- | column -s "$1" -t
          }


          ... to be able to use it as



          thead ',' filename


          Or even, to allow for an optional delimiter (and use comma if none is given),



          thead () {
          local delim=','

          if [ "$#" -gt 1 ]; then
          delim=$1
          shift
          fi

          head "$1" | cut -d "$delim" -f1- | column -s "$delim" -t
          }


          The function definition above could be placed wherever you usually define aliases.





          The issue with having a pipeline in an alias is that when you use the alias with an argument, this argument would be added to the end of the pipeline, not after the first command in the pipeline.





          The bash manual contains the sentence




          For almost every purpose, aliases are superseded by shell functions.







          share|improve this answer


























          • that's good, do you know btw how can I adjust it to accept a separator as a parameter to thead?

            – Max Li
            2 hours ago











          • @MaxLi See updated answer.

            – Kusalananda
            2 hours ago











          • @MaxLi I noticed that the delimiter was also present in the column command and that your cut command is a no-op. I fixed delimiter for column and added a note about the cut.

            – Kusalananda
            32 mins ago



















          4














          alias expansion is just text substitution which is parsed again by the shell, so when you do:



          thead file.csv


          That's just replaced with:



          head | cut -d, -f1- | column -s, -t file.csv


          and interpreted again.



          If you had written:



          <file.csv thead


          or



          cat file.csv | thead


          or



          { thead; } < file.csv


          It would have worked as it would have been replaced with:



          <file.csv head | cut -d, -f1- | column -s, -t
          cat file.csv | head | cut -d, -f1- | column -s, -t
          { head | cut -d, -f1- | column -s, -t; } < file.csv


          respectively. In any case, as @Kusalananda says, it's much better to use functions or scripts than aliases for that. Here, I'd just do:



          thead() { head "$@" | cut -d, -f1- | column -s, -t; }


          So you can do thead -n 12 file.csv file2.csv for instance.






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


            }
            });






            Max Li 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%2f502125%2faliased-pipeline-using-head-and-cut%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









            6














            For anything more advanced than a simple command, use a shell function instead of an alias:



            thead () {
            head "$1" | cut -d, -f1- | column -s, -t
            }


            This shell function would run head on its first argument, and then send the result through the pipeline (although, since the cut gets all columns due to -f 1-, this part can probably be removed; I'm leaving it in here as you had it in your original pipeline).



            Or,



            thead () {
            head "$2" | cut -d "$1" -f1- | column -s "$1" -t
            }


            ... to be able to use it as



            thead ',' filename


            Or even, to allow for an optional delimiter (and use comma if none is given),



            thead () {
            local delim=','

            if [ "$#" -gt 1 ]; then
            delim=$1
            shift
            fi

            head "$1" | cut -d "$delim" -f1- | column -s "$delim" -t
            }


            The function definition above could be placed wherever you usually define aliases.





            The issue with having a pipeline in an alias is that when you use the alias with an argument, this argument would be added to the end of the pipeline, not after the first command in the pipeline.





            The bash manual contains the sentence




            For almost every purpose, aliases are superseded by shell functions.







            share|improve this answer


























            • that's good, do you know btw how can I adjust it to accept a separator as a parameter to thead?

              – Max Li
              2 hours ago











            • @MaxLi See updated answer.

              – Kusalananda
              2 hours ago











            • @MaxLi I noticed that the delimiter was also present in the column command and that your cut command is a no-op. I fixed delimiter for column and added a note about the cut.

              – Kusalananda
              32 mins ago
















            6














            For anything more advanced than a simple command, use a shell function instead of an alias:



            thead () {
            head "$1" | cut -d, -f1- | column -s, -t
            }


            This shell function would run head on its first argument, and then send the result through the pipeline (although, since the cut gets all columns due to -f 1-, this part can probably be removed; I'm leaving it in here as you had it in your original pipeline).



            Or,



            thead () {
            head "$2" | cut -d "$1" -f1- | column -s "$1" -t
            }


            ... to be able to use it as



            thead ',' filename


            Or even, to allow for an optional delimiter (and use comma if none is given),



            thead () {
            local delim=','

            if [ "$#" -gt 1 ]; then
            delim=$1
            shift
            fi

            head "$1" | cut -d "$delim" -f1- | column -s "$delim" -t
            }


            The function definition above could be placed wherever you usually define aliases.





            The issue with having a pipeline in an alias is that when you use the alias with an argument, this argument would be added to the end of the pipeline, not after the first command in the pipeline.





            The bash manual contains the sentence




            For almost every purpose, aliases are superseded by shell functions.







            share|improve this answer


























            • that's good, do you know btw how can I adjust it to accept a separator as a parameter to thead?

              – Max Li
              2 hours ago











            • @MaxLi See updated answer.

              – Kusalananda
              2 hours ago











            • @MaxLi I noticed that the delimiter was also present in the column command and that your cut command is a no-op. I fixed delimiter for column and added a note about the cut.

              – Kusalananda
              32 mins ago














            6












            6








            6







            For anything more advanced than a simple command, use a shell function instead of an alias:



            thead () {
            head "$1" | cut -d, -f1- | column -s, -t
            }


            This shell function would run head on its first argument, and then send the result through the pipeline (although, since the cut gets all columns due to -f 1-, this part can probably be removed; I'm leaving it in here as you had it in your original pipeline).



            Or,



            thead () {
            head "$2" | cut -d "$1" -f1- | column -s "$1" -t
            }


            ... to be able to use it as



            thead ',' filename


            Or even, to allow for an optional delimiter (and use comma if none is given),



            thead () {
            local delim=','

            if [ "$#" -gt 1 ]; then
            delim=$1
            shift
            fi

            head "$1" | cut -d "$delim" -f1- | column -s "$delim" -t
            }


            The function definition above could be placed wherever you usually define aliases.





            The issue with having a pipeline in an alias is that when you use the alias with an argument, this argument would be added to the end of the pipeline, not after the first command in the pipeline.





            The bash manual contains the sentence




            For almost every purpose, aliases are superseded by shell functions.







            share|improve this answer















            For anything more advanced than a simple command, use a shell function instead of an alias:



            thead () {
            head "$1" | cut -d, -f1- | column -s, -t
            }


            This shell function would run head on its first argument, and then send the result through the pipeline (although, since the cut gets all columns due to -f 1-, this part can probably be removed; I'm leaving it in here as you had it in your original pipeline).



            Or,



            thead () {
            head "$2" | cut -d "$1" -f1- | column -s "$1" -t
            }


            ... to be able to use it as



            thead ',' filename


            Or even, to allow for an optional delimiter (and use comma if none is given),



            thead () {
            local delim=','

            if [ "$#" -gt 1 ]; then
            delim=$1
            shift
            fi

            head "$1" | cut -d "$delim" -f1- | column -s "$delim" -t
            }


            The function definition above could be placed wherever you usually define aliases.





            The issue with having a pipeline in an alias is that when you use the alias with an argument, this argument would be added to the end of the pipeline, not after the first command in the pipeline.





            The bash manual contains the sentence




            For almost every purpose, aliases are superseded by shell functions.








            share|improve this answer














            share|improve this answer



            share|improve this answer








            edited 36 mins ago

























            answered 2 hours ago









            KusalanandaKusalananda

            131k17250409




            131k17250409













            • that's good, do you know btw how can I adjust it to accept a separator as a parameter to thead?

              – Max Li
              2 hours ago











            • @MaxLi See updated answer.

              – Kusalananda
              2 hours ago











            • @MaxLi I noticed that the delimiter was also present in the column command and that your cut command is a no-op. I fixed delimiter for column and added a note about the cut.

              – Kusalananda
              32 mins ago



















            • that's good, do you know btw how can I adjust it to accept a separator as a parameter to thead?

              – Max Li
              2 hours ago











            • @MaxLi See updated answer.

              – Kusalananda
              2 hours ago











            • @MaxLi I noticed that the delimiter was also present in the column command and that your cut command is a no-op. I fixed delimiter for column and added a note about the cut.

              – Kusalananda
              32 mins ago

















            that's good, do you know btw how can I adjust it to accept a separator as a parameter to thead?

            – Max Li
            2 hours ago





            that's good, do you know btw how can I adjust it to accept a separator as a parameter to thead?

            – Max Li
            2 hours ago













            @MaxLi See updated answer.

            – Kusalananda
            2 hours ago





            @MaxLi See updated answer.

            – Kusalananda
            2 hours ago













            @MaxLi I noticed that the delimiter was also present in the column command and that your cut command is a no-op. I fixed delimiter for column and added a note about the cut.

            – Kusalananda
            32 mins ago





            @MaxLi I noticed that the delimiter was also present in the column command and that your cut command is a no-op. I fixed delimiter for column and added a note about the cut.

            – Kusalananda
            32 mins ago













            4














            alias expansion is just text substitution which is parsed again by the shell, so when you do:



            thead file.csv


            That's just replaced with:



            head | cut -d, -f1- | column -s, -t file.csv


            and interpreted again.



            If you had written:



            <file.csv thead


            or



            cat file.csv | thead


            or



            { thead; } < file.csv


            It would have worked as it would have been replaced with:



            <file.csv head | cut -d, -f1- | column -s, -t
            cat file.csv | head | cut -d, -f1- | column -s, -t
            { head | cut -d, -f1- | column -s, -t; } < file.csv


            respectively. In any case, as @Kusalananda says, it's much better to use functions or scripts than aliases for that. Here, I'd just do:



            thead() { head "$@" | cut -d, -f1- | column -s, -t; }


            So you can do thead -n 12 file.csv file2.csv for instance.






            share|improve this answer




























              4














              alias expansion is just text substitution which is parsed again by the shell, so when you do:



              thead file.csv


              That's just replaced with:



              head | cut -d, -f1- | column -s, -t file.csv


              and interpreted again.



              If you had written:



              <file.csv thead


              or



              cat file.csv | thead


              or



              { thead; } < file.csv


              It would have worked as it would have been replaced with:



              <file.csv head | cut -d, -f1- | column -s, -t
              cat file.csv | head | cut -d, -f1- | column -s, -t
              { head | cut -d, -f1- | column -s, -t; } < file.csv


              respectively. In any case, as @Kusalananda says, it's much better to use functions or scripts than aliases for that. Here, I'd just do:



              thead() { head "$@" | cut -d, -f1- | column -s, -t; }


              So you can do thead -n 12 file.csv file2.csv for instance.






              share|improve this answer


























                4












                4








                4







                alias expansion is just text substitution which is parsed again by the shell, so when you do:



                thead file.csv


                That's just replaced with:



                head | cut -d, -f1- | column -s, -t file.csv


                and interpreted again.



                If you had written:



                <file.csv thead


                or



                cat file.csv | thead


                or



                { thead; } < file.csv


                It would have worked as it would have been replaced with:



                <file.csv head | cut -d, -f1- | column -s, -t
                cat file.csv | head | cut -d, -f1- | column -s, -t
                { head | cut -d, -f1- | column -s, -t; } < file.csv


                respectively. In any case, as @Kusalananda says, it's much better to use functions or scripts than aliases for that. Here, I'd just do:



                thead() { head "$@" | cut -d, -f1- | column -s, -t; }


                So you can do thead -n 12 file.csv file2.csv for instance.






                share|improve this answer













                alias expansion is just text substitution which is parsed again by the shell, so when you do:



                thead file.csv


                That's just replaced with:



                head | cut -d, -f1- | column -s, -t file.csv


                and interpreted again.



                If you had written:



                <file.csv thead


                or



                cat file.csv | thead


                or



                { thead; } < file.csv


                It would have worked as it would have been replaced with:



                <file.csv head | cut -d, -f1- | column -s, -t
                cat file.csv | head | cut -d, -f1- | column -s, -t
                { head | cut -d, -f1- | column -s, -t; } < file.csv


                respectively. In any case, as @Kusalananda says, it's much better to use functions or scripts than aliases for that. Here, I'd just do:



                thead() { head "$@" | cut -d, -f1- | column -s, -t; }


                So you can do thead -n 12 file.csv file2.csv for instance.







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered 1 hour ago









                Stéphane ChazelasStéphane Chazelas

                306k57580935




                306k57580935






















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










                    draft saved

                    draft discarded


















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













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












                    Max Li 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%2f502125%2faliased-pipeline-using-head-and-cut%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

                    Щит и меч (фильм) Содержание Названия серий | Сюжет |...

                    is 'sed' thread safeWhat should someone know about using Python scripts in the shell?Nexenta bash script uses...

                    Meter-Bus Содержание Параметры шины | Стандартизация |...