linux – 合并已排序的文件,具有最小的缓冲

linux – 合并已排序的文件,具有最小的缓冲,第1张

概述我有两个以可排序的timesetamp为前缀的日志文件. 我希望按顺序看到它们,而生成日志文件的进程仍在运行.这是一个非常忠实的模拟情况: slow() { # print stdout at 30bps exec pv -qL 30}timestamp() { # prefix stdin with a sortable timestamp exec tai6 我有两个以可排序的timesetamp为前缀的日志文件.
我希望按顺序看到它们,而生成日志文件的进程仍在运行.这是一个非常忠实的模拟情况:

slow() {    # print stdout at 30bps    exec pv -qL 30}timestamp() {    # prefix stdin with a sortable timestamp    exec tai64n}# Simulate two slowly-running batch jobs:seq 000 099 | slow | timestamp > seq.1 &seq1=$!seq 100 199 | slow | timestamp > seq.2 &seq2=$!# I'd like to see the combined output of those two logs,in timestamp-sorted ordertry1() {    # this shows me the output as soon as it's available,# but it's badly interleaved and not necessarily in order    tail -f seq.1 --pID=$seq1 &    tail -f seq.2 --pID=$seq2 &}try2() {    # this gives the correct output,# but outputs nothing till both jobs have stopped    sort -sm <(tail -f seq.1 --pID=$seq1) <(tail -f seq.2 --pID=$seq2)}try2wait
解决方法 solution using tee(写入文件以便标准输出仍然进入控制台)将无法工作,因为tee引入了不必要的延迟并且无法解决问题.同样,我无法使用tail -f -s 0.01(它将轮询改为100 / s)和/或某种类型的调用(如split -filter =’sort -sm’)来解决小批量的问题.

我也没有tai64n,所以我的测试代码实际上使用了这个功能相同的perl代码:

tai64n() {  perl -MTime::HiRes=time -pe '    printf "\@4%015x%x%n",split(/\./,time),$c; print 0 x(25-$c) . " "'}

在用sh和bash解决这个问题之后,我运用了标准的故障转移,perl:

slow() {    # print stdout at 30bps    pv -qL 30}tai64n_and_tee() {  # prefix stdin with a sortable timestamp and copy to given file  perl -MTime::HiRes=time -e '    $_ = shift;    open(TEE,"> $_") or dIE $!;    while (<>) {      $_ = sprintf("\@4%015x%x%n",$c) . 0 x(25-$c) . " $_";      print TEE $_;      print $_;    }  ' ""}# Simulate two slowly-running batch jobs:seq 000 099 | slow | tai64n_and_tee seq.1 &seq 100 199 | slow | tai64n_and_tee seq.2 &wait

这对我来说很方便,因为我已经使用perl作为时间戳.我没有做到这一点,perl充当tai64n和一个单独的perl调用充当tee,但它可能适用于真正的tai64n.

总结

以上是内存溢出为你收集整理的linux – 合并已排序的文件,具有最小缓冲全部内容,希望文章能够帮你解决linux – 合并已排序的文件,具有最小的缓冲所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/yw/1019401.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存