можно выбрать одно значение из списка

Чтобы проверить содержимое последней строки каждого файла в текущем каталоге, используйте tailиgrep:

for file in *.txt
do
  tail -1 -- "$file" | grep -q "must have" || printf '%s\n' "$file"
done

Предполагается, что имена ваших текстовых файлов заканчиваются на .txt; отрегулируйте этот подстановочный знак по мере необходимости. tail -1захватывает последнюю строку файла (с поиском назад, что более эффективно, чем потенциальное чтение файла вперед ); эта строка затем направляется в grepдля поиска нужного текста. Флаг -qдля команды grep сообщает ему, что он должен молчать о своей работе, и просто устанавливает соответствующий код возврата. Если grep не не находит совпадение, то чередование ||"или" указывает оболочке выполнить printf, которая печатает имя файла.

Вы можете поместить этот код в скрипт или в функцию:

lastlinehas() {
  for file in *.txt
  do
    tail -1 -- "$file" | grep -q "$1" || printf '%s\n' "$file"
  done
}
0
10.03.2021, 17:55
1 ответ

После того, как вы загрузите свой csv в переменную с помощью соответствующегоread_csvмодуля , вы сможете фильтровать и выбирать значения внутри списка с помощью обычных инструментов фильтрации (selectattr, map,...)

Для демонстрации я поместил файл выше в files/example.csv. Тогда следующееplaybook.yml:

---
- name: Parse csv and filtering demo
  hosts: localhost
  gather_facts: false

  tasks:
    - name: read in our csv file in a list
      read_csv:
        path: files/example.csv
        delimiter: ;
      register: hosts_info

    - name: Show the entire info we parsed (if running with `-v`)
      debug:
        var: hosts_info.list
        verbosity: 1

    - name: Show ip depending on fqdn and type
      vars:
        ip: >-
          {{
            hosts_info.list
            | selectattr('fqdn', '==', item.fqdn)
            | selectattr('Typ', '==', item.type)
            | map(attribute='IPAddress')
            | list
            | first
          }}
      debug:
        msg: "The ip of {{ item.fqdn }} for type {{ item.type }} is {{ ip }}"
      loop:
        - fqdn: aaa.domain.tld
          type: db
        - fqdn: aaa.domain.tld
          type: log

дает (запуск с -v, чтобы увидеть промежуточную отладку)

$ ansible-playbook playbook.yml 

PLAY [Parse csv and filtering demo] ****************************************************************************************************************************************************************************************************

TASK [read in our csv file in a list] **************************************************************************************************************************************************************************************************
ok: [localhost]

TASK [Show the entire info we parsed (if running with `-v`)] ***************************************************************************************************************************************************************************
skipping: [localhost]

TASK [Show ip depending on fqdn and type] **********************************************************************************************************************************************************************************************
ok: [localhost] => (item={'fqdn': 'aaa.domain.tld', 'type': 'db'}) => {
    "msg": "The ip of aaa.domain.tld for type db is 10.1.1.1"
}
ok: [localhost] => (item={'fqdn': 'aaa.domain.tld', 'type': 'log'}) => {
    "msg": "The ip of aaa.domain.tld for type log is 10.2.2.2"
}

PLAY RECAP *****************************************************************************************************************************************************************************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0
0
28.03.2021, 20:05

Теги

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