Как ввести сумму, полученную из awk в середине вывода текста

Я пытаюсь напечатать сумму в середине строки. Мой скрипт запрашивает имя пользователя, а затем вытаскивает общее количество процессов и общее время для этого пользователя из файла.

Я хочу напечатать предложение с итогами в середине предложения.

Используя awk я могу получить итоговые значения для процессов и минут, но не могу напечатать результаты уравнения в середине предложения. Результат моего уравнения появляется после предложения.

Я чувствую, что мне нужно использовать якорь, как в HTML. Я использую PuTTY.

  oliver|Login|100 smith|Login|20 oliver|Time|25 oliver|Time|25 smith|Time|20 Anne|Login|100 Example: User name? oliver oliver has run 3 processes for a total of 150 minutes case $choice" in 1) echo -n "User name?" read username echo "$username has run processes for a total of minutes" ;; 

Я хотел бы получить общее количество процессов и минут для ввода определенного имени пользователя. Затем вставьте эти числа в предложение, где они принадлежат.

  • Как объединить два файла в одной строке?
  • Прикрепленное изображение отсутствует в почте Unix при прикреплении нескольких файлов
  • Как работает этот скрипт svn?
  • Как получить имя пользователя, выполнившего скрипт bash как sudo?
  • Как синхронизировать два диска (или папки) с использованием символических (или жестких) ссылок (например, rsync)?
  • Что мне нужно в моем скрипте, чтобы иметь возможность изменять право собственности на структуру каталогов, принадлежащую root, текущему пользователю, выполняющему сценарий bash?
  • Мне нужно взять вывод команды и сделать ее именем файла, используя скрипт
  • Проверка наличия программного обеспечения в сеансе SSH
  • One Solution collect form web for “Как ввести сумму, полученную из awk в середине вывода текста”

    Следующий скрипт берет свои аргументы из командной строки, а не из командной строки. Это упрощает повторное использование других скриптов и позволяет пользователю указывать несколько имен пользователей.

     $ cat jake.sh #! /bin/sh inputfile='input.txt' for u in "$@" ; do awk -F'|' -vu="$u" '$1 == u { sum = sum + $3 ; count++} END {print u " has run " count " processes for a total of " \ sum " minutes."}' < "$inputfile" done 

    Обратите внимание, как скрипт оболочки передает переменную оболочки $u скрипту awk через -vu="$u" . Это позволяет избежать использования двойных кавычек вокруг скрипта awk для непосредственного использования оболочки $u … поскольку для этого потребуется экранирование каждого экземпляра $1 , $3 и каждого " в awk-скрипте с обратной косой чертой \ .

    Вход такой же, как в вашем примере:

     $ cat input.txt oliver|Login|100 smith|Login|20 oliver|Time|25 oliver|Time|25 smith|Time|20 Anne|Login|100 

    И вот результат:

     $ ./jake.sh oliver smith Anne oliver has run 3 processes for a total of 150 minutes. smith has run 2 processes for a total of 40 minutes. Anne has run 1 processes for a total of 100 minutes. 

    Если вы действительно хотели, чтобы он запрашивал имя пользователя, сценарий выглядел бы так:

     #! /bin/sh inputfile='input.txt' echo -n "User name?" read username awk -F'|' -vu="$username" '$1 == u { sum = sum + $3 ; count++} END {print u " has run " count " processes for a total of " \ sum " minutes."}' < "$inputfile" 
    Linux и Unix - лучшая ОС в мире.