Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将未过滤的文本传送到awk系统命令';s标准_Awk_Gawk - Fatal编程技术网

将未过滤的文本传送到awk系统命令';s标准

将未过滤的文本传送到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的输出作

我有一个gawk脚本,它在一个变量中积累了一堆HTML,现在应该通过一个系统命令将其传递给lynx

(请随时告诉我AWK是一个糟糕的解决方案…
而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