AWK:在每一行上执行CURL并解析结果

时间:2011-07-18 21:00:53

标签: shell curl awk

给出一个包含以下行的输入流:

123
456
789
098
...

我想致电

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

xxx是每行的编号,每次让awk脚本从curl输出中获取一些写入输出流的信息。我想知道如果不使用awk“system()”调用以下方式是否可行:

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

3 个答案:

答案 0 :(得分:1)

您可以使用bash并避免使用awk system调用:

grep "^[0-9]*$" lines | while read line; do
    curl -s "http://foo.bar/some.php?id=$line" | awk 'do your parsing ...'
done

答案 1 :(得分:0)

shell循环将获得类似的结果,如下所示:

#!/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客户端一起使用。

答案 2 :(得分:0)

如果你的文件动态地附加了id,你可以守护一个小的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,它将读取文件并在没有数据时退出,这对于了解如何操作非常有用。