Combine two operations in one command - awk












3















I need to change



-
FROM



Car
Bus


-
TO



Helicopter
Airplane


This two commands are sufficient.



awk -i inplace '{sub(/Car/,"Helicopter")}1' file
awk -i inplace '{sub(/Bus/,"Airplane")}1' file


And this command is sufficient too.



sed -e 's/Car/Helicopter/' 
-e 's/Bus/Airplane/'
-i file


In "awk" is it possible to combine two operations in one command like "sed".



Thanks in advance!










share|improve this question


















  • 1





    awk -i inplace '{sub(/Car/,"Helicopter")} {sub(/Bus/,"Airplane")}1' file did not work?

    – Alex Stragies
    Jan 6 '17 at 9:28






  • 1





    @AlexStragies This is the expected answer, I believe

    – xhienne
    Jan 6 '17 at 9:55
















3















I need to change



-
FROM



Car
Bus


-
TO



Helicopter
Airplane


This two commands are sufficient.



awk -i inplace '{sub(/Car/,"Helicopter")}1' file
awk -i inplace '{sub(/Bus/,"Airplane")}1' file


And this command is sufficient too.



sed -e 's/Car/Helicopter/' 
-e 's/Bus/Airplane/'
-i file


In "awk" is it possible to combine two operations in one command like "sed".



Thanks in advance!










share|improve this question


















  • 1





    awk -i inplace '{sub(/Car/,"Helicopter")} {sub(/Bus/,"Airplane")}1' file did not work?

    – Alex Stragies
    Jan 6 '17 at 9:28






  • 1





    @AlexStragies This is the expected answer, I believe

    – xhienne
    Jan 6 '17 at 9:55














3












3








3








I need to change



-
FROM



Car
Bus


-
TO



Helicopter
Airplane


This two commands are sufficient.



awk -i inplace '{sub(/Car/,"Helicopter")}1' file
awk -i inplace '{sub(/Bus/,"Airplane")}1' file


And this command is sufficient too.



sed -e 's/Car/Helicopter/' 
-e 's/Bus/Airplane/'
-i file


In "awk" is it possible to combine two operations in one command like "sed".



Thanks in advance!










share|improve this question














I need to change



-
FROM



Car
Bus


-
TO



Helicopter
Airplane


This two commands are sufficient.



awk -i inplace '{sub(/Car/,"Helicopter")}1' file
awk -i inplace '{sub(/Bus/,"Airplane")}1' file


And this command is sufficient too.



sed -e 's/Car/Helicopter/' 
-e 's/Bus/Airplane/'
-i file


In "awk" is it possible to combine two operations in one command like "sed".



Thanks in advance!







awk gawk mawk






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Jan 6 '17 at 9:25









SabrinaSabrina

161




161








  • 1





    awk -i inplace '{sub(/Car/,"Helicopter")} {sub(/Bus/,"Airplane")}1' file did not work?

    – Alex Stragies
    Jan 6 '17 at 9:28






  • 1





    @AlexStragies This is the expected answer, I believe

    – xhienne
    Jan 6 '17 at 9:55














  • 1





    awk -i inplace '{sub(/Car/,"Helicopter")} {sub(/Bus/,"Airplane")}1' file did not work?

    – Alex Stragies
    Jan 6 '17 at 9:28






  • 1





    @AlexStragies This is the expected answer, I believe

    – xhienne
    Jan 6 '17 at 9:55








1




1





awk -i inplace '{sub(/Car/,"Helicopter")} {sub(/Bus/,"Airplane")}1' file did not work?

– Alex Stragies
Jan 6 '17 at 9:28





awk -i inplace '{sub(/Car/,"Helicopter")} {sub(/Bus/,"Airplane")}1' file did not work?

– Alex Stragies
Jan 6 '17 at 9:28




1




1





@AlexStragies This is the expected answer, I believe

– xhienne
Jan 6 '17 at 9:55





@AlexStragies This is the expected answer, I believe

– xhienne
Jan 6 '17 at 9:55










2 Answers
2






active

oldest

votes


















2














Try it like this:



awk -i inplace '{sub(/Car/,"Helicopter")} {sub(/Bus/,"Airplane")}1' file



Now you have 3 Condition {Action} blocks. 1 is a special case of a condition {action} block.



Or try this:



awk -i inplace '{sub(/Car/,"Helicopter") ; sub(/Bus/,"Airplane")}1' file



, because an action block can have more than one statement.






share|improve this answer
























  • This works as long as the later substitutions do not substitute something already processed by an earlier substitution. Take as an example changing goods into cargo and then car into automobile.

    – Kusalananda
    Jan 6 '17 at 11:42



















0














awk -i inplace '
/^Car$/ { print "Helicopter"; next }
/^Bus$/ { print "Airplane"; next }
{ print }' file


By matching against the complete line (using the ^ and $ anchors), we make sure that we don't match the strings as substrings in other lines (e.g. the Car in Cart). By acting on the found line and then immediately executing next we protect from changing a line into something that might trigger a later pattern.






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%2f335307%2fcombine-two-operations-in-one-command-awk%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









    2














    Try it like this:



    awk -i inplace '{sub(/Car/,"Helicopter")} {sub(/Bus/,"Airplane")}1' file



    Now you have 3 Condition {Action} blocks. 1 is a special case of a condition {action} block.



    Or try this:



    awk -i inplace '{sub(/Car/,"Helicopter") ; sub(/Bus/,"Airplane")}1' file



    , because an action block can have more than one statement.






    share|improve this answer
























    • This works as long as the later substitutions do not substitute something already processed by an earlier substitution. Take as an example changing goods into cargo and then car into automobile.

      – Kusalananda
      Jan 6 '17 at 11:42
















    2














    Try it like this:



    awk -i inplace '{sub(/Car/,"Helicopter")} {sub(/Bus/,"Airplane")}1' file



    Now you have 3 Condition {Action} blocks. 1 is a special case of a condition {action} block.



    Or try this:



    awk -i inplace '{sub(/Car/,"Helicopter") ; sub(/Bus/,"Airplane")}1' file



    , because an action block can have more than one statement.






    share|improve this answer
























    • This works as long as the later substitutions do not substitute something already processed by an earlier substitution. Take as an example changing goods into cargo and then car into automobile.

      – Kusalananda
      Jan 6 '17 at 11:42














    2












    2








    2







    Try it like this:



    awk -i inplace '{sub(/Car/,"Helicopter")} {sub(/Bus/,"Airplane")}1' file



    Now you have 3 Condition {Action} blocks. 1 is a special case of a condition {action} block.



    Or try this:



    awk -i inplace '{sub(/Car/,"Helicopter") ; sub(/Bus/,"Airplane")}1' file



    , because an action block can have more than one statement.






    share|improve this answer













    Try it like this:



    awk -i inplace '{sub(/Car/,"Helicopter")} {sub(/Bus/,"Airplane")}1' file



    Now you have 3 Condition {Action} blocks. 1 is a special case of a condition {action} block.



    Or try this:



    awk -i inplace '{sub(/Car/,"Helicopter") ; sub(/Bus/,"Airplane")}1' file



    , because an action block can have more than one statement.







    share|improve this answer












    share|improve this answer



    share|improve this answer










    answered Jan 6 '17 at 10:25









    Alex StragiesAlex Stragies

    3,3151638




    3,3151638













    • This works as long as the later substitutions do not substitute something already processed by an earlier substitution. Take as an example changing goods into cargo and then car into automobile.

      – Kusalananda
      Jan 6 '17 at 11:42



















    • This works as long as the later substitutions do not substitute something already processed by an earlier substitution. Take as an example changing goods into cargo and then car into automobile.

      – Kusalananda
      Jan 6 '17 at 11:42

















    This works as long as the later substitutions do not substitute something already processed by an earlier substitution. Take as an example changing goods into cargo and then car into automobile.

    – Kusalananda
    Jan 6 '17 at 11:42





    This works as long as the later substitutions do not substitute something already processed by an earlier substitution. Take as an example changing goods into cargo and then car into automobile.

    – Kusalananda
    Jan 6 '17 at 11:42













    0














    awk -i inplace '
    /^Car$/ { print "Helicopter"; next }
    /^Bus$/ { print "Airplane"; next }
    { print }' file


    By matching against the complete line (using the ^ and $ anchors), we make sure that we don't match the strings as substrings in other lines (e.g. the Car in Cart). By acting on the found line and then immediately executing next we protect from changing a line into something that might trigger a later pattern.






    share|improve this answer




























      0














      awk -i inplace '
      /^Car$/ { print "Helicopter"; next }
      /^Bus$/ { print "Airplane"; next }
      { print }' file


      By matching against the complete line (using the ^ and $ anchors), we make sure that we don't match the strings as substrings in other lines (e.g. the Car in Cart). By acting on the found line and then immediately executing next we protect from changing a line into something that might trigger a later pattern.






      share|improve this answer


























        0












        0








        0







        awk -i inplace '
        /^Car$/ { print "Helicopter"; next }
        /^Bus$/ { print "Airplane"; next }
        { print }' file


        By matching against the complete line (using the ^ and $ anchors), we make sure that we don't match the strings as substrings in other lines (e.g. the Car in Cart). By acting on the found line and then immediately executing next we protect from changing a line into something that might trigger a later pattern.






        share|improve this answer













        awk -i inplace '
        /^Car$/ { print "Helicopter"; next }
        /^Bus$/ { print "Airplane"; next }
        { print }' file


        By matching against the complete line (using the ^ and $ anchors), we make sure that we don't match the strings as substrings in other lines (e.g. the Car in Cart). By acting on the found line and then immediately executing next we protect from changing a line into something that might trigger a later pattern.







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Jan 28 at 18:14









        KusalanandaKusalananda

        128k16242399




        128k16242399






























            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.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f335307%2fcombine-two-operations-in-one-command-awk%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世紀