Can I grep/awk/sed a line for multiple matches in a single line and get the info after it?












0















I get files that come in from an external source that are unordered... and contain bits of info I'm not interested in.



name: myName var1: xxx var2: bbbb
var1: xxx var2: aaaa name: myName
name: myName var1: yyy var2: bbbb
var1: xxx var2: aaaa name: myName
name: myName var1: yyy var2: aaaa
var2: aaaa name: myName var1: xxx
name: myName var1: zzz var2: bbbb
var2: aaaa name: myName var1: zzz


What'd I'd like to output are just the values related to var1 and var2 and ordered so that var1 is first. Like so:



xxx bbbb
xxx aaaa
yyy bbbb
xxx aaaa
yyy aaaa
xxx aaaa
zzz bbbb
zzz aaaa


Any ideas if this is possible ?










share|improve this question









New contributor




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

























    0















    I get files that come in from an external source that are unordered... and contain bits of info I'm not interested in.



    name: myName var1: xxx var2: bbbb
    var1: xxx var2: aaaa name: myName
    name: myName var1: yyy var2: bbbb
    var1: xxx var2: aaaa name: myName
    name: myName var1: yyy var2: aaaa
    var2: aaaa name: myName var1: xxx
    name: myName var1: zzz var2: bbbb
    var2: aaaa name: myName var1: zzz


    What'd I'd like to output are just the values related to var1 and var2 and ordered so that var1 is first. Like so:



    xxx bbbb
    xxx aaaa
    yyy bbbb
    xxx aaaa
    yyy aaaa
    xxx aaaa
    zzz bbbb
    zzz aaaa


    Any ideas if this is possible ?










    share|improve this question









    New contributor




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























      0












      0








      0








      I get files that come in from an external source that are unordered... and contain bits of info I'm not interested in.



      name: myName var1: xxx var2: bbbb
      var1: xxx var2: aaaa name: myName
      name: myName var1: yyy var2: bbbb
      var1: xxx var2: aaaa name: myName
      name: myName var1: yyy var2: aaaa
      var2: aaaa name: myName var1: xxx
      name: myName var1: zzz var2: bbbb
      var2: aaaa name: myName var1: zzz


      What'd I'd like to output are just the values related to var1 and var2 and ordered so that var1 is first. Like so:



      xxx bbbb
      xxx aaaa
      yyy bbbb
      xxx aaaa
      yyy aaaa
      xxx aaaa
      zzz bbbb
      zzz aaaa


      Any ideas if this is possible ?










      share|improve this question









      New contributor




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












      I get files that come in from an external source that are unordered... and contain bits of info I'm not interested in.



      name: myName var1: xxx var2: bbbb
      var1: xxx var2: aaaa name: myName
      name: myName var1: yyy var2: bbbb
      var1: xxx var2: aaaa name: myName
      name: myName var1: yyy var2: aaaa
      var2: aaaa name: myName var1: xxx
      name: myName var1: zzz var2: bbbb
      var2: aaaa name: myName var1: zzz


      What'd I'd like to output are just the values related to var1 and var2 and ordered so that var1 is first. Like so:



      xxx bbbb
      xxx aaaa
      yyy bbbb
      xxx aaaa
      yyy aaaa
      xxx aaaa
      zzz bbbb
      zzz aaaa


      Any ideas if this is possible ?







      linux text-processing awk sed grep






      share|improve this question









      New contributor




      Erich 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




      Erich 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 47 mins ago









      Jeff Schaller

      43.9k1161141




      43.9k1161141






      New contributor




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









      asked 1 hour ago









      ErichErich

      1012




      1012




      New contributor




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





      New contributor





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






      Erich 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


















          1














          You can do it in awk:



          awk '{
          v1 = v2 = ""
          for (i=1; i<NF; i+=2) {
          if ($i == "var1:") v1 = $(i+1)
          if ($i == "var2:") v2 = $(i+1)
          }
          print v1, v2
          }'


          For each line, it tests all the odd-numbered fields ($1, $3 and $5)
          for being var1: or var2:, and, if matched,
          copies the value (from the next field, $(i+1),
          which becomes $2, $4 or $6) to v1 or v2.






          share|improve this answer































            0














            In Perl, creating a hash from the key-value pairs:



            $ perl -alnE 'my %h = @F; say "$h{qw(var1:)} $h{qw(var2:)}"' file
            xxx bbbb
            xxx aaaa
            yyy bbbb
            xxx aaaa
            yyy aaaa
            xxx aaaa
            zzz bbbb
            zzz aaaa





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


              }
              });






              Erich 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%2f508629%2fcan-i-grep-awk-sed-a-line-for-multiple-matches-in-a-single-line-and-get-the-info%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









              1














              You can do it in awk:



              awk '{
              v1 = v2 = ""
              for (i=1; i<NF; i+=2) {
              if ($i == "var1:") v1 = $(i+1)
              if ($i == "var2:") v2 = $(i+1)
              }
              print v1, v2
              }'


              For each line, it tests all the odd-numbered fields ($1, $3 and $5)
              for being var1: or var2:, and, if matched,
              copies the value (from the next field, $(i+1),
              which becomes $2, $4 or $6) to v1 or v2.






              share|improve this answer




























                1














                You can do it in awk:



                awk '{
                v1 = v2 = ""
                for (i=1; i<NF; i+=2) {
                if ($i == "var1:") v1 = $(i+1)
                if ($i == "var2:") v2 = $(i+1)
                }
                print v1, v2
                }'


                For each line, it tests all the odd-numbered fields ($1, $3 and $5)
                for being var1: or var2:, and, if matched,
                copies the value (from the next field, $(i+1),
                which becomes $2, $4 or $6) to v1 or v2.






                share|improve this answer


























                  1












                  1








                  1







                  You can do it in awk:



                  awk '{
                  v1 = v2 = ""
                  for (i=1; i<NF; i+=2) {
                  if ($i == "var1:") v1 = $(i+1)
                  if ($i == "var2:") v2 = $(i+1)
                  }
                  print v1, v2
                  }'


                  For each line, it tests all the odd-numbered fields ($1, $3 and $5)
                  for being var1: or var2:, and, if matched,
                  copies the value (from the next field, $(i+1),
                  which becomes $2, $4 or $6) to v1 or v2.






                  share|improve this answer













                  You can do it in awk:



                  awk '{
                  v1 = v2 = ""
                  for (i=1; i<NF; i+=2) {
                  if ($i == "var1:") v1 = $(i+1)
                  if ($i == "var2:") v2 = $(i+1)
                  }
                  print v1, v2
                  }'


                  For each line, it tests all the odd-numbered fields ($1, $3 and $5)
                  for being var1: or var2:, and, if matched,
                  copies the value (from the next field, $(i+1),
                  which becomes $2, $4 or $6) to v1 or v2.







                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered 1 hour ago









                  G-ManG-Man

                  13.6k93768




                  13.6k93768

























                      0














                      In Perl, creating a hash from the key-value pairs:



                      $ perl -alnE 'my %h = @F; say "$h{qw(var1:)} $h{qw(var2:)}"' file
                      xxx bbbb
                      xxx aaaa
                      yyy bbbb
                      xxx aaaa
                      yyy aaaa
                      xxx aaaa
                      zzz bbbb
                      zzz aaaa





                      share|improve this answer




























                        0














                        In Perl, creating a hash from the key-value pairs:



                        $ perl -alnE 'my %h = @F; say "$h{qw(var1:)} $h{qw(var2:)}"' file
                        xxx bbbb
                        xxx aaaa
                        yyy bbbb
                        xxx aaaa
                        yyy aaaa
                        xxx aaaa
                        zzz bbbb
                        zzz aaaa





                        share|improve this answer


























                          0












                          0








                          0







                          In Perl, creating a hash from the key-value pairs:



                          $ perl -alnE 'my %h = @F; say "$h{qw(var1:)} $h{qw(var2:)}"' file
                          xxx bbbb
                          xxx aaaa
                          yyy bbbb
                          xxx aaaa
                          yyy aaaa
                          xxx aaaa
                          zzz bbbb
                          zzz aaaa





                          share|improve this answer













                          In Perl, creating a hash from the key-value pairs:



                          $ perl -alnE 'my %h = @F; say "$h{qw(var1:)} $h{qw(var2:)}"' file
                          xxx bbbb
                          xxx aaaa
                          yyy bbbb
                          xxx aaaa
                          yyy aaaa
                          xxx aaaa
                          zzz bbbb
                          zzz aaaa






                          share|improve this answer












                          share|improve this answer



                          share|improve this answer










                          answered 34 mins ago









                          steeldriversteeldriver

                          37.4k45288




                          37.4k45288






















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










                              draft saved

                              draft discarded


















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













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












                              Erich 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%2f508629%2fcan-i-grep-awk-sed-a-line-for-multiple-matches-in-a-single-line-and-get-the-info%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

                              CARDNET

                              Boot-repair Failure: Unable to locate package grub-common:i386

                              濃尾地震