Получите все записи из файла со столбцом Date меньше чем месяц

Это даже работало раньше на Linux. Я просто укусил его (на Debian после обновления пакета COREUTILS, который содержит команду CUT) и нашел эту ошибку.

Это ошибка в Coreutils:

https://bugs.launchpad.net/ubuntu/+source/coreutils/+bug/211262

Кто-то сломал обратную совместимость, и никто не исправил. Раньше было такое 0 было хорошо, тоже и рассматривается как 1. Теперь 0 выпускает ошибку. Таким образом, все сценарии, которые зависят от этого поведения, сломаны и должны быть изменены.

0
24.01.2015, 02:30
2 ответа

Это будет начать. Требуется 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 дней, плюс или минус в час для летних переходов

1
28.01.2020, 02:51

Просто играйте с Дата Команда Внутри 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» . Остальные должны быть самоснабженными.

0
28.01.2020, 02:51

Теги

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