【问题标题】:how to change the existing printed line in AWK如何更改 AWK 中现有的打印行
【发布时间】:2011-03-01 09:52:49
【问题描述】:

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

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

如何在同一行打印信息并刷新现有行?

例如,在执行循环时,它应该打印“一”,然后清除该行并打印“二”,然后清除该行并打印“三”等。您能帮帮我吗?

【问题讨论】:

    标签: shell awk


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      通过“清除线”,我假设您指的是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");
         }
      }'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-12-19
        • 1970-01-01
        • 2020-09-03
        • 1970-01-01
        • 2018-07-12
        • 1970-01-01
        • 1970-01-01
        • 2010-12-22
        相关资源
        最近更新 更多