Как получить последнее недавно три даты Журнал файлов?

С awk :

awk 'function p(){print l,c,d; delete a; delete b; c=d=0} 
  NR!=1&&l!=$1{p()} ++a[$2]==1{c++} ++b[$3]==1{d++} {l=$1} END{p()}' file

Объяснение:

  • function p () : определяет функцию с именем p () , которая печатает значения и удаляет использованные переменные и массивы.
  • NR! = 1 && l! = $ 1 , если это не первая строка и переменная l равна первому полю $ 1 , затем запустите функцию p () .
  • ++ a [$ 2] == 1 {c ++} , если приращение значения элемента массива a с индексом $ 2 равно 1 , тогда это значение будет отображаться в первую очередь и, следовательно, увеличить переменную c . ++ перед элементом возвращает новое значение, поэтому вызывает приращение перед сравнением с 1 .
  • ++ b [$ 3] == 1 {d ++} то же, что и выше, но с третьим полем и переменной d .
  • {l = $ 1} l до первого поля (для следующей итерации .. выше)
  • END {p ()} после обработки последней строки , awk должен распечатать значения для последнего блока

С указанными вами входными данными выход будет:

apple 3 2
banana 4 5
cucumber 2 3
0
03.09.2018, 20:32
2 ответа

Здесь отсортируйте по части YYYY, а затем по части mm/ddлексически.

Это будет от 7 -го до 10 -го символов и от 1 -го до 5-го -го второго:-с разделителями. поля соответственно, поэтому:

<file sort -r -b -t: -k2.7,2.10 -k 2.1,2.5 | head -n 3

(здесь добавление -b, чтобы разрешить (и игнорировать )пробелы вокруг:)

2
28.01.2020, 02:23

Рассмотрите возможность использования такой сортировки:

sort -rt/ -k3n -k1.11n -k2n < input | head -3

Это сортирует строки на основе 3 ключевых полей, на основе /разделителя :сначала год, затем месяц (поле 1, пропуская имя пользователя и двоеточие ), затем поле 2 --все отсортированы по номерам. tail -3выводит только последние (последние )3 строки/даты.

1
28.01.2020, 02:23

Теги

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