не работает в printf awk? - PullRequest
       27

не работает в printf awk?

2 голосов
/ 17 июля 2011

Нашел этот скрипт по поиску, у него есть индикатор выполнения для cp, проблема в том, что он создает тонны строк, например:

0% [=>
0% [=>
0% [=>
0% [=>
0% [=>
0% [=>
0% [=>
0% [=>
0% [=>
0% [=>
0% [=>
1% [==>
1% [==>
1% [==>
1% [==>
1% [==>
1% [==>
1% [==>
1% [==>
1% [==>
1% [==>
1% [==>
1% [==>
1% [==>
1% [==>
1% [==>

вот код скрипта:

#!/bin/bash

   strace -q -ewrite cp --  `printf '%q ' $@` 2>&1 \
      | awk '{
        count += $NF
            if (count % 10 == 0) {
               percent = count / total_size * 100
               printf "%3d%% [", percent
               for (i=0;i<=percent;i++)
                  printf "="
               printf ">"
               for (i=percent;i<100;i++)
                  printf " "
               printf "]\r"
            }
         }
         END { print "" }' total_size=$(stat -c '%s' "${1}") count=0

Еще одна вещь, строка с ====== слишком длинная. Например, когда вы приближаетесь к 90-м годам, ==== переходит на следующую строку. Как я мог отредактировать это так, чтобы это напечатало 75 или около того, так как мой терминал по умолчанию имеет ширину 80.

Редактировать: Хорошо, я понял, это не будет работать, если в файле есть пробел. [Это просто ничего не делает, и выходит сразу после того, как я наберу команду]. Есть идеи?

Спасибо. :)

Ответы [ 2 ]

2 голосов
/ 17 июля 2011

Если ваш процент никогда не уменьшается, вам не нужен второй цикл for (который очищает остаток строки путем печати пробелов).

Любой шанс, что эти пробелы продвигают ваш курсор к следующемустрока, и \r просто помещает курсор в 1-й столбец этой новой строки?

Вы можете проверить это, убедившись, что ширина вашего терминала> 100 символов.

Спасибодля Random832 для этого:

Чтобы сократить строку:

if (count % 10 == 0) {
       percent = count / total_size * 100
       printf "%3d%% [", percent
       # Limit the line length to 40 chars
       width = percent * 40 / 100
       for (i=0;i<=width;i++)
          printf "="
       printf ">]\r"
    }
2 голосов
/ 17 июля 2011

Извлеките printf " " перед `printf"] \ r ":

#!/bin/bash

strace -q -ewrite cp --  `printf '%q ' $@` 2>&1 \
  | awk '{
    count += $NF
        if (count % 10 == 0) {
           percent = count / total_size * 100
           printf "%3d%% [", percent
           for (i=0;i<=percent;i++)
              printf "="
           printf ">"
           for (i=percent;i<100;i++)
              printf "]\r"
        }
     }
     END { print "" }' total_size=$(stat -c '%s' "${1}") count=0

Кроме того, окно вашего терминала должно быть достаточно широким, чтобы обрабатывать все символы (110 символов или более).

...