我需要帮助我运行这样的bash脚本:
do_something > file.txt
(我在另一个回音输出中使用此file.txt的第三行)
现在我需要在file.txt的第二行获取一些字符。 (只有点 - "。")
我可以使用此命令获取字符数:
progress=$(awk 'NR==2' file.txt | grep -o \. | wc -w)
但问题是,file.txt和第二行的字符数是"进度条"所以它从0到XY(即100)个字符的时间变化。
我想用它来查看百分比的进度:echo -ne "$progress % \\r"
我怎么能在循环中做到这一点? do_something > file.txt
必须只启动一次。在接下来的5-20秒内,它在第二行打印点,我必须每秒更新一次这个数字到我的输出回波" XY%"。
我如何每秒从file.txt中读取并找到" new / updated"字符数?*< 修改的
编辑: *它的实时过程。我的do_something> file.txt是"打印"点到这个文件,我希望打印结果实时保存在$ progress中。因此,第一个命令是打印点到文件,我每秒实时计算它们并打印从0-100%完成的百分比
答案 0 :(得分:1)
首先,您应该在后台运行命令:
do_something > file.txt &
然后您可以观察输出文件中的更改。这将每秒无限地打印file.txt
的第二行。
while true; do sed -n '2p' < file.txt; sleep 1; done
如果您只想打印第二行上的字符数,可以执行以下操作:
while true; do sed -n '2p' < file.txt | wc -m; sleep 1; done
如果你想在第二行有100个字符时停止,你可以这样做:
MAX="100"
CUR="0"
while [ $CUR -lt $MAX ]; do CUR=`sed -n '2p' < sprint | wc -m`; echo $CUR; sleep 1; done
答案 1 :(得分:1)
您要做的是在后台运行do_something > file.txt
,然后进行监控。您可以使用特殊的kill
信号0
来执行此操作。
do_something > file.txt &
PID=$!
while kill -0 $PID 2> /dev/null
do
[calculate percent complete]
[display percent complete]
sleep 5
done