给出一个包含以下行的输入流:
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 }\'")
}'
答案 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
,它将读取文件并在没有数据时退出,这对于了解如何操作非常有用。