AWK在行号

时间:2018-04-08 02:15:48

标签: awk

我发出命令来动态显示tar已处理的文件数量:

tar zcvf some_archive.tar.gz /a/lot/of/files | \
awk 'ORS="\r"{print NR} END{print "\n"}'

通过这种方式,我可以看到越来越多的数字,因为tar为每个处理的文件输出一行。

但是,光标始终位于第一个数字下方。我希望它在最后一位数之后,所以我有这个:

awk 'ORS=""{print "\r"NR} END{print "\n"}'

可悲的是,AWK停止动态生成任何输出。

那我该怎么做呢?

1 个答案:

答案 0 :(得分:1)

不确定原因,但改为printf对我有用(然后你也不需要设置ORS):

for i in {1..20}; do echo x; sleep 1; done | awk '{printf "\r" NR} END {print ""}'

这可能是一个更令人满意的答案,添加一个刷新来强制输出:

 for i in {1..20}; do echo x; sleep 1; done | awk -v ORS="" '{print "\r" NR; fflush()} END {print "\n"}'
相关问题