как изменить существующую печатную строку в AWK - PullRequest
0 голосов
/ 01 марта 2011

Когда я выполняю следующую строку, она печатает слова в новой строке.

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

Как я могу напечатать информацию в той же строке со сбросом существующей строки?во время выполнения цикла он должен напечатать «один», затем стереть строку и вывести «два», затем стереть строку и вывести «три» и т. д. Не могли бы вы мне помочь?

Ответы [ 2 ]

3 голосов
/ 01 марта 2011

Попробуйте изменить перевод строки \n на возврат каретки \r (работает ли это в некоторой степени зависит от настроек вашего терминала).Да, и выведите кучу конечных пробелов, чтобы стереть предыдущую строку, и используйте printf, чтобы избежать автоматического \n, который всегда добавляет print.

$ awk 'BEGIN { printf "line one    \r" }'; sleep 2; awk 'BEGIN {printf "line two   \r" }'
0 голосов
/ 01 марта 2011

С помощью "стереть строку" , я предполагаю, что вы имели в виду возврат каретки , который можно выразить с помощью escape-последовательности \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");
   }
}'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...