ntakouris
ntakouris

Reputation: 958

Evaluate another awk expression inside awk

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.

Minimal example dataset:

1099511629352 Nunez Jorge female 17/11/1986

Upvotes: 1

Views: 319

Answers (1)

oguz ismail
oguz ismail

Reputation: 50795

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

Upvotes: 1

Related Questions