【问题标题】:Write multiple strings to stdout and pipe them separately将多个字符串写入标准输出并分别管道它们
【发布时间】:2015-08-17 05:36:10
【问题描述】:

是否可以将每个写入标准的字符串通过管道传输到另一个命令?

// file example.js
#!/usr/bin/env node
process.stdout.write('foo')
process.stdout.write('bar')

当我运行 ./example.js | wc -m 时,我得到 6,这是 foobar 的字符长度值。

我想分别获取值 3 和 3。我必须在我的 javascript 文件中做一些特别的事情吗?还是命令?

【问题讨论】:

  • 示例中的“管道”使用“stdout”,即“流”。大多数程序(如“wc”)一次从流中读取一行。您可以轻松编写一个程序,一次读取一个字符,然后在到达空白处时停止。顺便说一句:wc 可以计算标准输出中的单词(默认)、行和/或字符。
  • @paulsm4 如果我的内容是一个有空格的文件怎么办,比换行符或空格更可靠的分隔符是什么?

标签: javascript node.js unix pipe stdout


【解决方案1】:

wc -m 计算其输入中的字符数。您不能将其分开/逐行分组(或任何其他分组)。这与你的 JS 代码无关。

如果你想通过其他方式得到计数的类型,用node其实也不是太难!

【讨论】:

    【解决方案2】:

    既然您提到您的内容可能是一个包含空格和行的文件,假设您需要每个文件的字符数

    //example.js    
    #!/usr/bin/env node
    process.stdout.write('foo')
    process.stdout.write('~') // print any delimiter which is not part of your files content
    process.stdout.write('bar')
    
    //Split them using awk and count it as usual
    ./example.js | awk 'BEGIN { RS="~" } {print}' | wc -m
    3
    3
    
    //or just using awk by removing spaces
    ./example.js | awk 'BEGIN { RS="~" } {gsub(" ", "", $0); print length}'
    

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-22
      • 1970-01-01
      • 1970-01-01
      • 2021-07-10
      • 1970-01-01
      • 2013-10-04
      • 1970-01-01
      相关资源
      最近更新 更多