Вы можете выполнить всю работу в awk
:
#!/bin/sh
file=$2
awk -v theta="$1" -F '[= ]+' '
$0 ~ theta { print $12; found++ }
END { if (!found) { print "Not available"; exit 1 } }' "$file"
Возможно, вы захотите добавить обработку ошибок для проверки того.
что есть два аргумента командной строки,
и $2
является именем читаемого файла, потому что
$2
является чем-то другим, а не читаемым файлом,
вы получите сообщение об ошибке от awk
$2
пустой или отсутствует,
awk
будет молча читать из стандартного ввода. (Конечно, любое или оба этих поведения могут вас устроить)
Примечания:
$0 ~ theta
на $8 == theta
. awk
инициализируются значением blank.
В математических контекстах это рассматривается как 0, поэтому found++
устанавливает found
в 1 при первом выполнении.
Я намеренно сказал found++
вместо found = 1
,
если несколько строк соответствуют значению тэта,
found
будет установлено количество таких строк.
Кажется, что это должно быть условием ошибки;
если вас это беспокоит, вы можете модифицировать блок END
.
для сообщения об ошибке, если found
не равно 1. print
из блока END
и пусть скрипт просто проверяет статус завершения awk
и выдать собственное сообщение об ошибке. Вам также следует поступить следующим образом
если вы хотите получить вывод от awk
(т.е. значение θ2).
И наоборот, если вам нужно только человекочитаемое сообщение об ошибке,
и вам не нужно иметь возможность проверить статус выхода,
вы можете удалить оператор exit
из блока END
. Сегодня я буквально столкнулся с этой проблемой на нескольких хостах в своей инфраструктуре.
Решение состоит в том, чтобы сделать то, что говорит ошибка. Установите пакет libselinux-python
. Или вы можете отключить selinux на целевом хосте (s ).
С сайта Ansible:
If you have SELinux enabled on remote nodes, you will also want to install libselinux-python on them before using any copy/file/template related functions in Ansible. You can of course still use the yum module in Ansible to install this package on remote systems that do not have it.
Я просто запустил это, и моя проблема была решена
yum install libselinux-python3
Как уже было сказано, решение заключается в установке libselinux -python3. Точнее, libselinux -python3 необходимо установить на каждую хост-машину, а не на доступный сервер.
Чтобы убедиться, что библиотека установлена на каждом хосте, я добавил дополнительную строку для установки libselinux -python3 перед запуском любого из зависимых от нее модулей.
- name: install python selinux library required by future ansible modules
become: true
yum:
name: libselinux-python3
state: present
update_cache: true
это исправило мои более поздние команды, которые ранее не работали.