我想用'wget'自动脚本下载一个大文件,但是'wget'生成的'progress'太冗长了。例如:
wget --progress=dot:mega 'http://mysite/my_large_file'
因为我的文件超过1.5GByes,虽然速度非常快(>9MB/s),即使将进度样式设置为'mega',输出仍然过于冗长:
0K ........ ........ ........ ........ ........ ........ 0% 2.03M 13m16s
3072K ........ ........ ........ ........ ........ ........ 0% 3.85M 10m7s
6144K ........ ........ ........ ........ ........ ........ 0% 3.85M 9m3s
9216K ........ ........ ........ ........ ........ ........ 0% 3.89M 8m30s
但我不想完成关闭进度输出,因为它让我知道是否有任何问题。现在我使用“sed”删除点:
wget --progress=dot:mega 'http://mysite/my_large_file' 2>&1 | sed -r 's/^ *([0-9]+K)[. ]*([0-9]+%) +([0-9.]+[A-Z]) +(.*)$/<\1,\2,\3\/s,remain:\4>, /g'
输出看起来好多了:
<0K,0%,2.45M/s,remain:11m0s>,
<3072K,0%,9.13M/s,remain:6m58s>,
<6144K,0%,9.35M/s,remain:5m35s>,
<9216K,0%,9.37M/s,remain:4m54s>,
<12288K,0%,9.52M/s,remain:4m28s>,
<15360K,1%,9.42M/s,remain:4m11s>,
现在我什至想删除每行末尾的“换行”字符,这样我的自动化框架就不会丢弃任何内容。我试过'td','awk',但它们都不会立即输出。也就是说,当我使用“sed”时,它会在下载过程中输出行,但是当我使用“td”或“awk”时,我等待了很长时间但没有任何输出。我猜它会在下载完成时输出整个文档,这是没有用的。
所以我想知道是否有一种方法可以在立即输出流时删除“换行”字符。
顺便说一句,有没有办法让“wget”进度输出不那么冗长但不是“不冗长”。例如,每行每 10MB 或 20MB 打印一次,或者以我最喜欢的方式,每隔 10 秒打印一次进度。
正如评论中所建议的那样,我在这里放置了我想要的输出:
<0K,0%,2.45M/s,remain:11m0s>, <3072K,0%,9.13M/s,remain:6m58s>, <6144K,0%,9.35M/s,remain:5m35s>, <9216K,0%,9.37M/s,remain:4m54s>, <12288K,0%,9.52M/s,remain:4m28s>, <15360K,1%,9.42M/s,remain:4m11s>,
所有输出在一行。
最佳答案
除了您的 sed 之外,您只需要通过管道传输一条 tr 指令,并在末尾给出:
wget --progress=dot:mega 'http://mysite/my_large_file' 2>&1 | sed -r 's/^ *([0-9]+K)[. ]*([0-9]+%) +([0-9.]+[A-Z]) +(.*)$/<\1,\2,\3\/s,remain:\4>, /g' |tr -d '\n'
关于linux - 如何在立即打印时删除流中的新行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52885077/