2016-05-20 3 views
0

У меня есть файл семени с содержимым ниже.Как запустить несколько циклов для цикла с несколькими вводами cat

$cat seed.txt 
macmachine,192.168.2.4,29772 
windowsmachine,192.168.2.5,29772 
$ 

Когда я бег цикла первой $x будет кошкой первого поля первой линии, macmachine из файла семян и «делать» запустить второй цикл, и это будет кот второго поля первой строки и так далее ...

Вот мой цикл

for x in `cat seed.txt |cut -d ',' -f1`; do 
    for y in `cat seed.txt |cut -d ',' -f2`; do 
     curl -v -H -X GET -H "X-TEST-Request-Id: Domain-$x" http://$y:8080/static/test/$y.jsp; 
    done; 
done 

проблема заключается в том, что работает в 8 раз. Если я удалю первую строку из файла семени, она будет запускаться только один раз.

Я уверен, что с петлей что-то не так, но я не могу это проследить. Пожалуйста, предложите, как исправить это.

+1

8 = 2 x 2 x 2; вы уверены, что у вас нет 'for z in' cat seed.txt | cut -d ',' -f3'; do' –

+0

Вы не должны использовать 'cat' (UUoC - бесполезное использование' cat'; ищите его); 'cut' вполне способен читать файлы. –

+0

С двумя строками данных вы должны получить 'curl', исполненный 4 раза. Внешний цикл имеет 'x' установлен в' macmachine', затем 'windowsmachine'; внутренний цикл имеет 'y' установлен в' 192.168.2.4', а затем '192.168.2.5'. Вы пропустили цикл на 'z', взяв последний столбец? Это даст вам 8 циклов, но код этого не показывает. –

ответ

1

Если вы хотите, чтобы ее обрабатывать одну строку за другой, сделать что-то вроде

while IFS=, read -r x y z; do 
    curl -v -H -X GET -H "X-TEST-Request-Id: Domain-$x" "http://$y:8080/static/test/$z.jsp" 
done < seed.txt 
+0

Уолтер благодарит за ваш быстрый ответ. Где мне нужно определить «cat seed.txt | cut -d», «-f1». также еще один запрос, как я могу добавить, если условие .. условие является, если первая строка завиток является успешной, а затем перейти к следующему завиту, если не удалось, а затем сломать. –

+0

Как я могу выбрать случайное поле? –

+0

Когда 'curl' (или большинство других команд) терпят неудачу,' $? 'Будет установлено значение, отличное от 0 (до следующей команды). Вы можете добавить 'if [$? -ne 0]; затем перерыв; fi' после линии завитка. Короче добавляется '|| break' в конце команды 'curl'. –

0

ты пытался сделать что-то подобное делает этот сценарий?

for x in `cat seed.txt` ; do 
curl -v -H -X GET -H "X-TEST-Request-Id: Domain-$(echo $x | cut -f 1 -d ',')" http://$(echo $x | cut -f 2 -d ','):8080/static/test/$(echo $x | cut -f 2 -d ',').jsp 
done 

«для» заявление читает каждую строку файла в соответствующей итерации цикла (два раза в данном случае) и присвоить строку (или текстовый элемент, разделенных пробелами, чтобы быть точным) из файла в х переменной так много сколько текстовых элементов находится в файле. Далее нужно разбить входную строку (переменную x) на переменные подстроки и снабдить их завихрением, что выполняется командой «echo | cut».

Смежные вопросы