如何在AWK中更改现有的打印行

时间:2011-03-01 09:52:50

标签: shell awk

当我执行以下行时,它会以换行符打印单词。

awk 'BEGIN { print "line one\nline two\nline three" }'

如何在刷新现有线的同一行中打印信息?

例如,在执行循环时,它应该打印'一个'然后擦除线并打印'两个'然后擦除线并打印'三个'等等你能帮助我吗?

2 个答案:

答案 0 :(得分:3)

尝试将换行符\n更改为回车符\r(这是否有效取决于您的终端设置)。哦,打印一堆尾随空格来清除前一行,并使用printf来避免\n始终添加的自动print

$ awk 'BEGIN { printf "line one    \r" }'; sleep 2; awk 'BEGIN {printf "line two   \r" }'

答案 1 :(得分:0)

通过“清除行”,我假设您指的是carriage return,可以使用\r转义序列表示。

例如:

[me@home]$ awk 'BEGIN { print "line one\rline two\rline three" }'
line three

“第一行”和“第二行”消失,因为它们已被消灭并被“第三行”取代。

如果您希望文本在被删除之前显示一段时间,则需要在每次打印之间插入延迟。

awk 'BEGIN{
    printf "line one";
    system("sleep 1");
    printf "\rline two";
    system("sleep 1");
    printf "\rline three";
}'

或使用循环

echo "one two three" | awk '{
   for (i=1; i<=NF; i++) {
       printf "\rline %s", $i;
       system("sleep 1");
   }
}'