Фильтровать CSV-файл по временным колонкам

Я редактировал

vim /etc/hosts

, добавил следующие строки

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

, и моя проблема исправлена:)

1
07.05.2018, 02:55
1 ответ

Я предполагаю, что ваши даты ММ/ДД/ГГГГ (, а не ДД/ММ/ГГГГ ). Я предполагаю, что вы хотите, чтобы отсечка была задана извне (, жестко запрограммирована )и не основывалась на первой строке.

Вы можете сделать это в gawk (GNU awk):

awk '
  BEGIN { cutoff = mktime("2018 2 3 17 0 0");
          if (cutoff < 0) { print "Bad cutoff date."; exit; } }
        {
            if (split($1, da, "/") == 3  &&  split($2, ti, ":") == 3) {
                thisdate = mktime(da[3] " " da[1] " " da[2] " " ti[1] " " ti[2] " " ti[3])
                if (thisdate >= 0  &&  thisdate < cutoff) print
            }
        }
    '

Функция mktimeпрограммы gawk преобразует строку времени в формате «ГГГГ ММ ДД чч мм сс» в системное время. Мы начинаем (BEGIN )с преобразования 03.02.2018 17 :00 :00 в системное время. Затем для каждой строки мы проверяем, содержит ли она допустимую дату и время, преобразуем ее и сравниваем с отсечкой.

Конечно, если ваш файл действительно разделен запятой -, вы должны использовать -F,.

1
27.01.2020, 23:43

Теги

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