我使用sort
和uniq
来处理脚本的输出,即
script | sort | uniq -c
脚本在执行更多处理并输出另外1000行之前,以可能1000行的块输出数据。块是完全独立的。
对我来说,能够通过sort
和uniq
处理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
进程替换的输出所必需的。