输出排序| uniq分段而不是等待完整的输入

时间:2014-04-16 20:28:33

标签: bash uniq

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

script | sort | uniq -c

在执行更多处理然后输出另外1000行之前,脚本以大约1000行的块输出数据。这些块是完全独立的。

对我来说,能够通过sortuniq处理1000行的输出并将结果输出到控制台是有用的,然后再继续这个过程。

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

1 个答案:

答案 0 :(得分:3)

这样的事情应该做你想做的事情:

#!/bin/bash

while true; do
    i=0
    while IFS= read -r; do
        printf "%s\n" "$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,请sort | uniq -c同步{{1}}进程替换的输出终端而不是重定向到文件或管道。