Оцените другое выражение awk внутри awk - PullRequest
0 голосов
/ 10 ноября 2018

В наборе данных, который я обрабатываю, 5-й ($5) столбец каждой строки содержит дату в формате '%d/%m/%y'. Я хочу сравнить это с предоставленным пользователем.

Я знаю, что для того, чтобы легко сравнивать даты с реляционными бинарными операторами, они должны быть в %y-%m-%d, поэтому мне нужно встроить-преобразовать значение 5-го столбца в значение, чтобы выражение выглядело как true:

Вот что я придумал до сих пор:

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

Как видите, '{if (FNR>1 && dateA<= system("bash echo "$5"| awk -F '/' '{print $3"-"$2"-"$1}'") ) {print}}' - это выражение, которое я пытаюсь оценить, но у меня возникают проблемы с обработкой системного вызова. Я действительно просто хочу позвонить awk -F '/' '{print $3"-"$2"-"$1}'", добавив туда $5, чтобы правильно преобразовать дату.

  • Нужно работать на MacOS и Linux (Ubuntu)

Минимальный примерный набор данных:

1099511629352 Nunez Jorge female 17/11/1986

1 Ответ

0 голосов
/ 10 ноября 2018

Вот решение для тараканов

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...