【发布时间】:2011-03-01 09:52:49
【问题描述】:
当我执行以下行时,它会在换行符中打印单词。
awk 'BEGIN { print "line one\nline two\nline three" }'
如何在同一行打印信息并刷新现有行?
例如,在执行循环时,它应该打印“一”,然后清除该行并打印“二”,然后清除该行并打印“三”等。您能帮帮我吗?
【问题讨论】:
当我执行以下行时,它会在换行符中打印单词。
awk 'BEGIN { print "line one\nline two\nline three" }'
如何在同一行打印信息并刷新现有行?
例如,在执行循环时,它应该打印“一”,然后清除该行并打印“二”,然后清除该行并打印“三”等。您能帮帮我吗?
【问题讨论】:
尝试将换行符 \n 更改为回车符 \r(这是否有效取决于您的终端设置)。哦,打印一堆尾随空格来清除前一行,并使用printf 来避免print 总是添加的自动\n。
$ awk 'BEGIN { printf "line one \r" }'; sleep 2; awk 'BEGIN {printf "line two \r" }'
【讨论】:
通过“清除线”,我假设您指的是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");
}
}'
【讨论】: