【发布时间】:2011-07-18 21:00:53
【问题描述】:
给定一个包含以下行的输入流:
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 }\'")
}'
【问题讨论】:
-
我发现这个问题在输入来自“真实”流而不是文件的情况下很有趣。例如,周期性地生成数据(线)的传感设备,例如在 /dev/ttyUSB0 上。在这种情况下,建议的答案(从文件中读取)仅适用于将流中的数据存储为临时文件并定期处理文件(如果数据在处理时到达怎么办?)。但是更直接的方法(使用管道)可能会更好......
-
注意
cat | grep | awk可以简化为awk '/^[0-9]+$/ {}' file。另外,你想做什么样的解析?也许根本不需要使用awk,while read循环就足够了。