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
bash awk
add a comment |
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
bash awk
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
add a comment |
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
bash 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.
- Needs to work on macos and linux (ubuntu)
Minimal example dataset:
1099511629352 Nunez Jorge female 17/11/1986
bash awk
bash awk
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
add a comment |
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
add a comment |
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
add a comment |
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
add a comment |
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
add a comment |
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
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
edited Nov 10 at 17:01
answered Nov 10 at 16:51
oguzismail
2,045517
2,045517
add a comment |
add a comment |
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
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
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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