Evaluate another awk expression inside awk











up vote
1
down vote

favorite












In the dataset I am processing, the 5th ($5) column of each line contains a date in '%d/%m/%y' format. I want to compare this with a user provided one.



I know that in order to easily compare dates with relational binary operators they need to be in %y-%m-%d so I need to inline-convert the 5th columns value to that in order for the expression to evaluate to true:



Here's what I've come up with till now:



    awk -F "$columnsep" -v dateA="$bornsince" '{if (FNR>1 && dateA<= system("bash echo "$5"| awk -F '/' '{print $3"-"$2"-"$1}'") ) {print}}' $file


As you can see, the '{if (FNR>1 && dateA<= system("bash echo "$5"| awk -F '/' '{print $3"-"$2"-"$1}'") ) {print}}' is the expression I am trying to evaluate but I have trouble getting the system call to parse. I really just want to call awk -F '/' '{print $3"-"$2"-"$1}'", piping $5 into it in order to convert the date properly.




  • Needs to work on macos and linux (ubuntu)


Minimal example dataset:



1099511629352 Nunez Jorge female 17/11/1986










share|improve this question




















  • 2




    You could provide a minimal example of your dataset
    – miimote
    Nov 10 at 16:44






  • 1




    awk version 20121220 on a macbook pro late 2017 up-to-date
    – Zarkopafilis
    Nov 10 at 16:44















up vote
1
down vote

favorite












In the dataset I am processing, the 5th ($5) column of each line contains a date in '%d/%m/%y' format. I want to compare this with a user provided one.



I know that in order to easily compare dates with relational binary operators they need to be in %y-%m-%d so I need to inline-convert the 5th columns value to that in order for the expression to evaluate to true:



Here's what I've come up with till now:



    awk -F "$columnsep" -v dateA="$bornsince" '{if (FNR>1 && dateA<= system("bash echo "$5"| awk -F '/' '{print $3"-"$2"-"$1}'") ) {print}}' $file


As you can see, the '{if (FNR>1 && dateA<= system("bash echo "$5"| awk -F '/' '{print $3"-"$2"-"$1}'") ) {print}}' is the expression I am trying to evaluate but I have trouble getting the system call to parse. I really just want to call awk -F '/' '{print $3"-"$2"-"$1}'", piping $5 into it in order to convert the date properly.




  • Needs to work on macos and linux (ubuntu)


Minimal example dataset:



1099511629352 Nunez Jorge female 17/11/1986










share|improve this question




















  • 2




    You could provide a minimal example of your dataset
    – miimote
    Nov 10 at 16:44






  • 1




    awk version 20121220 on a macbook pro late 2017 up-to-date
    – Zarkopafilis
    Nov 10 at 16:44













up vote
1
down vote

favorite









up vote
1
down vote

favorite











In the dataset I am processing, the 5th ($5) column of each line contains a date in '%d/%m/%y' format. I want to compare this with a user provided one.



I know that in order to easily compare dates with relational binary operators they need to be in %y-%m-%d so I need to inline-convert the 5th columns value to that in order for the expression to evaluate to true:



Here's what I've come up with till now:



    awk -F "$columnsep" -v dateA="$bornsince" '{if (FNR>1 && dateA<= system("bash echo "$5"| awk -F '/' '{print $3"-"$2"-"$1}'") ) {print}}' $file


As you can see, the '{if (FNR>1 && dateA<= system("bash echo "$5"| awk -F '/' '{print $3"-"$2"-"$1}'") ) {print}}' is the expression I am trying to evaluate but I have trouble getting the system call to parse. I really just want to call awk -F '/' '{print $3"-"$2"-"$1}'", piping $5 into it in order to convert the date properly.




  • Needs to work on macos and linux (ubuntu)


Minimal example dataset:



1099511629352 Nunez Jorge female 17/11/1986










share|improve this question















In the dataset I am processing, the 5th ($5) column of each line contains a date in '%d/%m/%y' format. I want to compare this with a user provided one.



I know that in order to easily compare dates with relational binary operators they need to be in %y-%m-%d so I need to inline-convert the 5th columns value to that in order for the expression to evaluate to true:



Here's what I've come up with till now:



    awk -F "$columnsep" -v dateA="$bornsince" '{if (FNR>1 && dateA<= system("bash echo "$5"| awk -F '/' '{print $3"-"$2"-"$1}'") ) {print}}' $file


As you can see, the '{if (FNR>1 && dateA<= system("bash echo "$5"| awk -F '/' '{print $3"-"$2"-"$1}'") ) {print}}' is the expression I am trying to evaluate but I have trouble getting the system call to parse. I really just want to call awk -F '/' '{print $3"-"$2"-"$1}'", piping $5 into it in order to convert the date properly.




  • Needs to work on macos and linux (ubuntu)


Minimal example dataset:



1099511629352 Nunez Jorge female 17/11/1986







bash awk






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 10 at 16:45

























asked Nov 10 at 16:18









Zarkopafilis

3421515




3421515








  • 2




    You could provide a minimal example of your dataset
    – miimote
    Nov 10 at 16:44






  • 1




    awk version 20121220 on a macbook pro late 2017 up-to-date
    – Zarkopafilis
    Nov 10 at 16:44














  • 2




    You could provide a minimal example of your dataset
    – miimote
    Nov 10 at 16:44






  • 1




    awk version 20121220 on a macbook pro late 2017 up-to-date
    – Zarkopafilis
    Nov 10 at 16:44








2




2




You could provide a minimal example of your dataset
– miimote
Nov 10 at 16:44




You could provide a minimal example of your dataset
– miimote
Nov 10 at 16:44




1




1




awk version 20121220 on a macbook pro late 2017 up-to-date
– Zarkopafilis
Nov 10 at 16:44




awk version 20121220 on a macbook pro late 2017 up-to-date
– Zarkopafilis
Nov 10 at 16:44












1 Answer
1






active

oldest

votes

















up vote
1
down vote



accepted










Here is a gawk solution



awk -F "$columnsep" -v dateA="$bornsince" '
(FNR > 1 && dateA <= cnv_date($5))
function cnv_date(date, a) {
split(date, a, "/")
return a[3] "-" a[2] "-" a[1]
}' $file





share|improve this answer























    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    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',
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    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%2fstackoverflow.com%2fquestions%2f53240894%2fevaluate-another-awk-expression-inside-awk%23new-answer', 'question_page');
    }
    );

    Post as a guest
































    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes








    up vote
    1
    down vote



    accepted










    Here is a gawk solution



    awk -F "$columnsep" -v dateA="$bornsince" '
    (FNR > 1 && dateA <= cnv_date($5))
    function cnv_date(date, a) {
    split(date, a, "/")
    return a[3] "-" a[2] "-" a[1]
    }' $file





    share|improve this answer



























      up vote
      1
      down vote



      accepted










      Here is a gawk solution



      awk -F "$columnsep" -v dateA="$bornsince" '
      (FNR > 1 && dateA <= cnv_date($5))
      function cnv_date(date, a) {
      split(date, a, "/")
      return a[3] "-" a[2] "-" a[1]
      }' $file





      share|improve this answer

























        up vote
        1
        down vote



        accepted







        up vote
        1
        down vote



        accepted






        Here is a gawk solution



        awk -F "$columnsep" -v dateA="$bornsince" '
        (FNR > 1 && dateA <= cnv_date($5))
        function cnv_date(date, a) {
        split(date, a, "/")
        return a[3] "-" a[2] "-" a[1]
        }' $file





        share|improve this answer














        Here is a gawk solution



        awk -F "$columnsep" -v dateA="$bornsince" '
        (FNR > 1 && dateA <= cnv_date($5))
        function cnv_date(date, a) {
        split(date, a, "/")
        return a[3] "-" a[2] "-" a[1]
        }' $file






        share|improve this answer














        share|improve this answer



        share|improve this answer








        edited Nov 10 at 17:01

























        answered Nov 10 at 16:51









        oguzismail

        2,045517




        2,045517






























             

            draft saved


            draft discarded



















































             


            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53240894%2fevaluate-another-awk-expression-inside-awk%23new-answer', 'question_page');
            }
            );

            Post as a guest




















































































            Popular posts from this blog

            Bressuire

            Vorschmack

            Quarantine