输出按节排序|uniq,而不是等待完整的输入

  • 本文关键字:等待 排序 uniq 输出 bash uniq
  • 更新时间 :
  • 英文 :


我使用sortuniq来处理脚本的输出,即

script | sort | uniq -c

脚本在执行更多处理并输出另外1000行之前,以可能1000行的块输出数据。块是完全独立的。

对我来说,能够通过sortuniq处理1000行块的输出,并在继续处理之前将结果输出到控制台,这将非常有用。

另一种说法是,我希望sort在处理1000行后清除它的缓冲区。这有可能吗?

像这样的东西应该可以做你想做的事情:

#!/bin/bash
while true; do
    i=0
    while IFS= read -r; do
        printf "%sn" "$REPLY"
        if ((i >= 999)); then
            break
        fi
        ((i++))
    done > >(sort | uniq -c)
    if ((i==0)); then
        # previous `while read` returned no lines. We're done.
        break
    fi
done | cat

这一操作一次从stdin读取多达1000行,并对每1000行的块应用sort | uniq -c。你可以这样使用它:

./yourscript | ./read1000.sh > output.txt

在有人指责我无用地使用cat奖励之前,如果输出要转到终端而不是重定向到文件或管道,则此cat是同步sort | uniq -c进程替换的输出所必需的。

最新更新