2011-03-01 52 views
0

当我执行以下行时,它将以换行符打印单词。如何更改AWK中的现有打印行

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

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

例如,在执行循环时,它应该打印'one',然后擦除行并打印'two',然后擦除行并打印'three'等。请您协助我吗?

回答

3

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

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

通过“消灭行”,我假设你指的是carriage return这可以使用\r转义序列来表示。

例如:

[[email protected]]$ 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"); 
    } 
}'