将未过滤的文本传送到awk系统命令';s标准
我有一个gawk脚本,它在一个变量中积累了一堆HTML,现在应该通过一个系统命令将其传递给lynx (请随时告诉我AWK是一个糟糕的解决方案…将未过滤的文本传送到awk系统命令';s标准,awk,gawk,Awk,Gawk,我有一个gawk脚本,它在一个变量中积累了一堆HTML,现在应该通过一个系统命令将其传递给lynx (请随时告诉我AWK是一个糟糕的解决方案…而readline;非常糟糕(速度慢),所以这是第2步) 我在awk里试过这个: cmd = sprintf( "bash -c \'lynx -dump -force_html -stdin <<< \"%s\"\'", html ) system ( cmd ) 试试看,我是从那里发现的。这将允许您将gawk的输出作
而readline;
非常糟糕(速度慢),所以这是第2步)
我在awk里试过这个:
cmd = sprintf( "bash -c \'lynx -dump -force_html -stdin <<< \"%s\"\'", html )
system ( cmd )
试试看,我是从那里发现的。这将允许您将gawk的输出作为协进程发送到另一个命令的stdin。要添加到n0741337的答案中,下面是一个使用gawk协进程的示例,我在阅读了他的答案后使用了gawk协进程,它从stdin获取“aline”,并将其传输到cat协进程,然后从cat协进程捕获输出并打印它:
printf "aline" | awk '
BEGIN{cmd="cat"}
{
print $0 |& cmd;
close(cmd, "to");
while ((cmd |& getline line) > 0) {
print "got", line
};
close (cmd);
}'
result: got aline
gawk手册对此功能进行了更广泛的讨论:是的,如果awk中没有解决方案,这是一个很好的答案,我将继续。但是awk很大,我是一个相对的初学者,所以我很难在没有询问的情况下确定这一点。你对awk了解得够透彻吗?你能详细说明一下什么是
一堆HTML
,以及你希望lynx
用一些示例输入/输出对它做些什么吗?另外-刚刚了解了今天的协进程(),这似乎是您可以使用的。来自web上随机站点的原始HTML源代码。与awk协过程的链接看起来确实一针见血,明天早上第一件事就是尝试一下。我在问题中添加了更多关于我最终目标的细节。@DavidParks如果你不能给出一个示例输入,即使是一个假的输入,我觉得这个问题是行不通的。我用一个优雅的10行gawk脚本(其中一半用于打开/关闭协进程)实现了用lynx解析所有嵌入HTML文档的目标,这个提示非常有用!
**********URL: http://some/url
Any 'ol HTML document
With pretty much any character you can imagine at some point
I'm using lynx to strip off the HTML and give me a nice format
**********URL: http://another/url
My input file provides a few 100,000 such html documents
printf "aline" | awk '
BEGIN{cmd="cat"}
{
print $0 |& cmd;
close(cmd, "to");
while ((cmd |& getline line) > 0) {
print "got", line
};
close (cmd);
}'
result: got aline