В bash: фильтровать, сортировать по дате в имени и возвращать имя с последней датой

Вы разместили строки Задачи .

В плейбуке вы должны как минимум указать целевые хосты и задачи .

- hosts: my_hosts
  tasks:
    - name: run show version on remote devices
      junos_command:
        commands: show version

См.http://docs.ansible.com/ansible/playbooks_intro.html#basics

0
28.07.2019, 03:38
2 ответа

Попробуйте это:

curl -l "ftp.fakeurl.com.au/In Stock Daily CSV/"  --user username:password |
  grep '\.csv$' |
  sort -t. -k3,3 -k2,2 -k1,1 |
  tail -n 1
  • grep '\.csv$'получить строки csv
  • sort -t. -k3,3 -k2,2 -k1,1сортировать с помощью .в качестве разделителя полей по 3-му полю года, 2-му полю месяца и 1-му полю InStockDailyXXпо дню
  • tail -n 1получить последнюю строку (новейшую дату)
2
28.01.2020, 02:29

В zshвы можете получить отсортированный список csvс помощью:

list=(*.csv(oe'<REPLY=${(j::)${(s:.:Oa)REPLY}}>'))

А затем последний находится в$list[-1]

  • *.csv(glob-qualifier):глобус с квалификаторами глобус
  • oe'<code>':oупорядочить список на основе eоценки code(, где код устанавливает переменную $REPLYв качестве основы для сортировки)
  • ${(s:.:Oa)REPLY}:sразделить $REPLYпеременную (, содержащую имя файла для рассмотрения )на точку, и перевернуть Oпорядок на aиндекс массива (перевернуть список )${(j::)list}:соединить элементы списка. Таким образом, если $REPLYизначально был InStockDaily10.07.19.csv, новый $REPLY, по которому будет сортироваться глобус, будет csv1907InStockDaily10.

Это предполагает, что префикс всегда такой же, как в вашем примере. Если нет, вы можете использовать:

list=(*.csv(oe'<REPLY=${(j::)${(Oas:.:M)REPLY%??.??.??.*}}>'))

Где %patternв сочетании с флагом расширения параметра Mизвлекает суффикс M, присоединяющий шаблон к концу $REPLY(, поэтому $REPLYбудет csv190710вместоcsv1907InStockDaily10).

0
28.01.2020, 02:29

Теги

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