Как ввести сумму, полученную из 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" ;; 

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

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" 
  • Unix-эпоха в миллисекундах
  • Подстановочный знак Bash для соответствия точно n символам
  • Перечисление «компьютеров, подобных мне» в моей подсети?
  • Удалять файлы в каталоге, которые также находятся в другом каталоге
  • Как создать имя файла для моего приложения электронной почты?
  • grep отлично работает в командной строке, но ничего не возвращает в скрипте
  • Усечение точности даты
  • bash aptitude установить список пакетов из командной строки
  • whiptail требует трех чисел, прежде чем продолжить
  • Как перебирать каждый файл в FTP-каталоге с помощью сценария bash
  • getopts передаёт значение объявленного параметра в функцию
  • Стандартный / канонический способ проверить, выводит ли предыдущий трубопровод выпуск?
  • Linux и Unix - лучшая ОС в мире.