How to remove underscore character with awk












1














I have a file as below:



This is an _PLUTO_
This is _PINEAPPLE_
This is _ORANGE_
This is _RICE_


I'm using below code to extract the output:



awk '{ print "Country: "  $NF }'  report.txt   


Output:



Country: _PLUTO_
Country: _PINEAPPLE_
Country: _ORANGE_
Country: _RICE_


How do I remove all the underscore so that my output looks below:



Country: PLUTO
Country: PINEAPPLE
Country: ORANGE
Country: RICE









share|improve this question




















  • 1




    substr or gsub - see gnu.org/software/gawk/manual/gawk.html#String-Functions
    – steeldriver
    1 hour ago










  • sed -i "s/_//" report.txt
    – Rui F Ribeiro
    1 hour ago
















1














I have a file as below:



This is an _PLUTO_
This is _PINEAPPLE_
This is _ORANGE_
This is _RICE_


I'm using below code to extract the output:



awk '{ print "Country: "  $NF }'  report.txt   


Output:



Country: _PLUTO_
Country: _PINEAPPLE_
Country: _ORANGE_
Country: _RICE_


How do I remove all the underscore so that my output looks below:



Country: PLUTO
Country: PINEAPPLE
Country: ORANGE
Country: RICE









share|improve this question




















  • 1




    substr or gsub - see gnu.org/software/gawk/manual/gawk.html#String-Functions
    – steeldriver
    1 hour ago










  • sed -i "s/_//" report.txt
    – Rui F Ribeiro
    1 hour ago














1












1








1







I have a file as below:



This is an _PLUTO_
This is _PINEAPPLE_
This is _ORANGE_
This is _RICE_


I'm using below code to extract the output:



awk '{ print "Country: "  $NF }'  report.txt   


Output:



Country: _PLUTO_
Country: _PINEAPPLE_
Country: _ORANGE_
Country: _RICE_


How do I remove all the underscore so that my output looks below:



Country: PLUTO
Country: PINEAPPLE
Country: ORANGE
Country: RICE









share|improve this question















I have a file as below:



This is an _PLUTO_
This is _PINEAPPLE_
This is _ORANGE_
This is _RICE_


I'm using below code to extract the output:



awk '{ print "Country: "  $NF }'  report.txt   


Output:



Country: _PLUTO_
Country: _PINEAPPLE_
Country: _ORANGE_
Country: _RICE_


How do I remove all the underscore so that my output looks below:



Country: PLUTO
Country: PINEAPPLE
Country: ORANGE
Country: RICE






awk






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited 1 hour ago









Rui F Ribeiro

39.1k1479130




39.1k1479130










asked 2 hours ago









user324294

113




113








  • 1




    substr or gsub - see gnu.org/software/gawk/manual/gawk.html#String-Functions
    – steeldriver
    1 hour ago










  • sed -i "s/_//" report.txt
    – Rui F Ribeiro
    1 hour ago














  • 1




    substr or gsub - see gnu.org/software/gawk/manual/gawk.html#String-Functions
    – steeldriver
    1 hour ago










  • sed -i "s/_//" report.txt
    – Rui F Ribeiro
    1 hour ago








1




1




substr or gsub - see gnu.org/software/gawk/manual/gawk.html#String-Functions
– steeldriver
1 hour ago




substr or gsub - see gnu.org/software/gawk/manual/gawk.html#String-Functions
– steeldriver
1 hour ago












sed -i "s/_//" report.txt
– Rui F Ribeiro
1 hour ago




sed -i "s/_//" report.txt
– Rui F Ribeiro
1 hour ago










2 Answers
2






active

oldest

votes


















3














You can use this snippet:



$ awk '{ gsub("_", "", $NF); print "Country: " $NF }' report.txt
Country: PLUTO
Country: PINEAPPLE
Country: ORANGE
Country: RICE


Note that gsub() will perform the modification in place, so it will store the result of the substitution back to $NF, in your case.



If you're using GNU awk, you can use gensub() instead, which is slightly simpler:



$ gawk '{ print "Country: " gensub("_", "", "g", $NF) }' report.txt
Country: PLUTO
Country: PINEAPPLE
Country: ORANGE
Country: RICE


See GNU awk documentation for gsub() and gensub() for more details.






share|improve this answer





























    0














    try



    awk -F_ '{ print "Country: " $(NF-1) }' infile


    You could try sed instead.



    sed -r 's/[^_]*_([^_]*)_.*/Country: 1/' infile




    • [^_]*_ matches everything until a first _ seen.


    • ([^_]*)_ matches everything after above match untill next _ seen and .* matches everything after that, but only keep (...) part as a captured group.


    • 1 is the back-reference to the ([^_]*) captured group.






    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%2f492144%2fhow-to-remove-underscore-character-with-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









      3














      You can use this snippet:



      $ awk '{ gsub("_", "", $NF); print "Country: " $NF }' report.txt
      Country: PLUTO
      Country: PINEAPPLE
      Country: ORANGE
      Country: RICE


      Note that gsub() will perform the modification in place, so it will store the result of the substitution back to $NF, in your case.



      If you're using GNU awk, you can use gensub() instead, which is slightly simpler:



      $ gawk '{ print "Country: " gensub("_", "", "g", $NF) }' report.txt
      Country: PLUTO
      Country: PINEAPPLE
      Country: ORANGE
      Country: RICE


      See GNU awk documentation for gsub() and gensub() for more details.






      share|improve this answer


























        3














        You can use this snippet:



        $ awk '{ gsub("_", "", $NF); print "Country: " $NF }' report.txt
        Country: PLUTO
        Country: PINEAPPLE
        Country: ORANGE
        Country: RICE


        Note that gsub() will perform the modification in place, so it will store the result of the substitution back to $NF, in your case.



        If you're using GNU awk, you can use gensub() instead, which is slightly simpler:



        $ gawk '{ print "Country: " gensub("_", "", "g", $NF) }' report.txt
        Country: PLUTO
        Country: PINEAPPLE
        Country: ORANGE
        Country: RICE


        See GNU awk documentation for gsub() and gensub() for more details.






        share|improve this answer
























          3












          3








          3






          You can use this snippet:



          $ awk '{ gsub("_", "", $NF); print "Country: " $NF }' report.txt
          Country: PLUTO
          Country: PINEAPPLE
          Country: ORANGE
          Country: RICE


          Note that gsub() will perform the modification in place, so it will store the result of the substitution back to $NF, in your case.



          If you're using GNU awk, you can use gensub() instead, which is slightly simpler:



          $ gawk '{ print "Country: " gensub("_", "", "g", $NF) }' report.txt
          Country: PLUTO
          Country: PINEAPPLE
          Country: ORANGE
          Country: RICE


          See GNU awk documentation for gsub() and gensub() for more details.






          share|improve this answer












          You can use this snippet:



          $ awk '{ gsub("_", "", $NF); print "Country: " $NF }' report.txt
          Country: PLUTO
          Country: PINEAPPLE
          Country: ORANGE
          Country: RICE


          Note that gsub() will perform the modification in place, so it will store the result of the substitution back to $NF, in your case.



          If you're using GNU awk, you can use gensub() instead, which is slightly simpler:



          $ gawk '{ print "Country: " gensub("_", "", "g", $NF) }' report.txt
          Country: PLUTO
          Country: PINEAPPLE
          Country: ORANGE
          Country: RICE


          See GNU awk documentation for gsub() and gensub() for more details.







          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered 1 hour ago









          filbranden

          7,0152735




          7,0152735

























              0














              try



              awk -F_ '{ print "Country: " $(NF-1) }' infile


              You could try sed instead.



              sed -r 's/[^_]*_([^_]*)_.*/Country: 1/' infile




              • [^_]*_ matches everything until a first _ seen.


              • ([^_]*)_ matches everything after above match untill next _ seen and .* matches everything after that, but only keep (...) part as a captured group.


              • 1 is the back-reference to the ([^_]*) captured group.






              share|improve this answer




























                0














                try



                awk -F_ '{ print "Country: " $(NF-1) }' infile


                You could try sed instead.



                sed -r 's/[^_]*_([^_]*)_.*/Country: 1/' infile




                • [^_]*_ matches everything until a first _ seen.


                • ([^_]*)_ matches everything after above match untill next _ seen and .* matches everything after that, but only keep (...) part as a captured group.


                • 1 is the back-reference to the ([^_]*) captured group.






                share|improve this answer


























                  0












                  0








                  0






                  try



                  awk -F_ '{ print "Country: " $(NF-1) }' infile


                  You could try sed instead.



                  sed -r 's/[^_]*_([^_]*)_.*/Country: 1/' infile




                  • [^_]*_ matches everything until a first _ seen.


                  • ([^_]*)_ matches everything after above match untill next _ seen and .* matches everything after that, but only keep (...) part as a captured group.


                  • 1 is the back-reference to the ([^_]*) captured group.






                  share|improve this answer














                  try



                  awk -F_ '{ print "Country: " $(NF-1) }' infile


                  You could try sed instead.



                  sed -r 's/[^_]*_([^_]*)_.*/Country: 1/' infile




                  • [^_]*_ matches everything until a first _ seen.


                  • ([^_]*)_ matches everything after above match untill next _ seen and .* matches everything after that, but only keep (...) part as a captured group.


                  • 1 is the back-reference to the ([^_]*) captured group.







                  share|improve this answer














                  share|improve this answer



                  share|improve this answer








                  edited 1 hour ago

























                  answered 1 hour ago









                  αғsнιη

                  16.5k102865




                  16.5k102865






























                      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%2f492144%2fhow-to-remove-underscore-character-with-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

                      Quarter-circle Tiles

                      build a pushdown automaton that recognizes the reverse language of a given pushdown automaton?

                      Mont Emei