Добавление ответа на основе вашего последнего обновления (SSH на каждый сервер и выполнение одной или нескольких команд, использующих значения идентификатора и имени ).
Начиная с примера файла, подобного этому:
$ cat testfile.txt
192.168.56.1,12345,N1
192.168.56.2,23456,N2
192.168.56.3,34567,N3
Цикл while
с read
может выполнять эту работу:
while IFS=, read -r IP ID NAME; do
echo "ssh $IP myprogram $ID $NAME"
done < testfile.txt
Что дает следующий результат:
ssh 192.168.56.1 myprogram 12345 N1
ssh 192.168.56.2 myprogram 23456 N2
ssh 192.168.56.3 myprogram 34567 N3
Цикл работает следующим образом. Из входного файла каждая строка читается по очереди. В каждой строке содержимое разбивается на разные поля на основе специальной переменной IFS
. Установив IFS=,
, вы разделяете строку при каждом появлении символа ','. Это приведет к тому, что каждая строка будет разделена на три поля.
После этого каждое поле назначается соответствующим переменным IP
, ID
и NAME
. Эти переменные доступны вам внутри тела цикла. В качестве примера я просто распечатываю возможную команду ssh
для каждой строки.
Обратите внимание, что файл CSV, который я использовал в качестве примера, является простым. Если у вас есть более сложный файл CSV, вам нужно будет использовать подходящий парсер CSV, такой как csvkit
.
Тест не прошел из-за изменения поведения в OpenSSL 1.1.1e. Попробуйте сейчас с OpenSSL 1.1.1d. См.https://bugs.python.org/issue40018для получения дополнительной информации.