AWK: выполнить CURL в каждой строке и проанализировать результат - PullRequest
6 голосов
/ 19 июля 2011

задан входной поток со следующими строками:

123
456
789
098
...

Я хотел бы позвонить

curl -s http://foo.bar/some.php?id=xxx

с xxx, являющимся номером для каждой строки, и каждый раз, когда скрипт awk извлекает некоторую информацию из вывода curl, который записывается в выходной поток Мне интересно, возможно ли это без использования вызова "system ()" awk следующим образом:

cat lines | grep "^[0-9]*$" | awk '
    {
        system("curl -s " $0 \
        " | awk \'{ #parsing; print }\'")
    }'

Ответы [ 3 ]

1 голос
/ 11 сентября 2011

Вы можете использовать bash и избегать awk system call:

grep "^[0-9]*$" lines | while read line; do
    curl -s "http://foo.bar/some.php?id=$line" | awk 'do your parsing ...'
done
0 голосов
/ 31 марта 2016

Если ваш файл динамически добавляется к идентификаторам, вы можете демонизировать небольшой цикл while, чтобы постоянно проверять наличие дополнительных данных в файле, например:

while IFS= read -d $'\n' -r a || sleep 1; do [[ -n "$a" ]] && curl -s "http://foo.bar/some.php?id=${a}"; done < lines.txt

В противном случаеесли он статический, вы можете изменить sleep 1 на break, и он прочтет файл и выйдет, когда не останется данных, очень полезно знать, как это сделать.

0 голосов
/ 19 июля 2011

Оболочечный цикл достиг бы аналогичного результата, как показано ниже:

#!/bin/bash
for f in $(cat lines|grep "^[0-9]*$"); do 
    curl -s "http://foo.bar/some.php?id=$f" | awk '{....}'
done

Альтернативные методы выполнения подобных задач включают использование Perl или Python с HTTP-клиентом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...