Это даже работало раньше на Linux. Я просто укусил его (на Debian после обновления пакета COREUTILS, который содержит команду CUT) и нашел эту ошибку.
Это ошибка в Coreutils:
https://bugs.launchpad.net/ubuntu/+source/coreutils/+bug/211262
Кто-то сломал обратную совместимость, и никто не исправил. Раньше было такое 0 было хорошо, тоже и рассматривается как 1. Теперь 0 выпускает ошибку. Таким образом, все сценарии, которые зависят от этого поведения, сломаны и должны быть изменены.
Это будет начать. Требуется GNU awk для временных функций:
gawk -F, '
function totime(ymd) {gsub(/[-_]/," ",ymd); return mktime(ymd " 0 0 0")}
BEGIN {now = systime(); m1 = now - 86400 * 30; m6 = now - 86400 * 180}
FNR == 1 {next}
{t = totime($3)}
t > m1 {print "m1", $0; next}
t > m6 {print "m6", $0}
' file
m6 2131321,ABCDS,2014-10-20
m1 2432745314,ASRER, 2015-01-20
m1 2132432423,safdsad, 2015-12-30
Это не ровно 1 и 6 месяцев, это 30 и 180 дней, плюс или минус в час для летних переходов
Просто играйте с Дата
Команда Внутри awk
awk и перенаправить вывод из Печать
Для нужных файлов в соответствии с определенными условиями:
awk -F, 'BEGIN{ "date -d\"month ago\" +%s" | getline T1; close("date");
"date -d\"6 months ago\" +%s" | getline T6; close("date")}
{ "date -d" $3 " +%s" | getline t; close("date");
if(t>T1){print $0>"file2";next} if(t>T6)print $0>"file3"}' file
Решающая часть - это формат преобразования даты до количества секунд с 1970 года с датой с датой ... «+% S»
. Остальные должны быть самоснабженными.