Сравните даты с использованием awk в Bash

[ ! . -sf / ] &&
mkdir ../bad  &&
pax  -rwls/$/.bad/ . ../bad

Это создаст зеркало жесткой ссылки на . в ./bad. Каждый файл, укорененный в . впоследствии также будет найден в ../bad, но по имени с приставкой .bad. Если новое дерево удовлетворяет, удалите текущее дерево и mv дерево ../bad поверх него.

0
17.11.2018, 15:31
2 ответа

Будет проще, если даты будут в YYYYMMDD(, тогда они будут в лексикографическом и числовом порядке ). Вы можете использовать gensubдля этого в awk. Например:

awk -F"|" -v d="$d" -v dp='(..)/(..)/(....)' 'BEGIN {gensub(dp, "\3\2\1", d)} {dt=$5; gensub(dp, "\3\2\1", dt);} dt >= d' foo

Переменная dсодержит дату для сравнения, а dpсодержит шаблон, соответствующий дате DD/MM/YYYY. Затем с помощью gensubмы перемещаемся по тем (\3, \2, \1, которые являются согласованными группами ((....), вторым (..), первым (..)соответственно ). То же самое с пятым полем каждой строки, которое мы копируем, чтобы избежать изменения ввода.

Я расширил ваш пример, добавив еще несколько дат:

1099511628908|Chen|Wei|female|02/08/1989|2010-05-24T20:52:26.582+0000|27.98.244.108|Firefox
1099511633435|Smith|Jack|male|19/04/1978|2010-05-26T03:45:11.772+0000|50.72.193.218|Internet Explorer
1099511633435|Smith|Jack|male|19/04/1979|2010-05-26T03:45:11.772+0000|50.72.193.218|Internet Explorer
1099511633435|Smith|Jack|male|19/04/1977|2010-05-26T03:45:11.772+0000|50.72.193.218|Internet Explorer
1099511633435|Smith|Jack|male|19/04/1980|2010-05-26T03:45:11.772+0000|50.72.193.218|Internet Explorer
1099511633435|Smith|Jack|male|19/03/1978|2010-05-26T03:45:11.772+0000|50.72.193.218|Internet Explorer

И получил этот результат, используя 19/04/1978для сравнения:

1099511633435|Smith|Jack|male|19/04/1978|2010-05-26T03:45:11.772+0000|50.72.193.218|Internet Explorer
1099511633435|Smith|Jack|male|19/04/1979|2010-05-26T03:45:11.772+0000|50.72.193.218|Internet Explorer
1099511633435|Smith|Jack|male|19/04/1980|2010-05-26T03:45:11.772+0000|50.72.193.218|Internet Explorer
3
28.01.2020, 02:18

Как насчет

DT="01/08/1989"
awk -F\| -vDT=${DT:6}${DT:3:2}${DT:0:2} 'substr($5, 7) substr($5, 4, 2) substr($5, 1, 2) > DT' file
1099511628908|Chen|Wei|female|02/08/1989|2010-05-24T20:52:26.582+0000|27.98.244.108|Firefox
1
28.01.2020, 02:18

Теги

Похожие вопросы