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

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

  • Как заменить токены из одного файла данными из другого?
  • Как удалить двойные кавычки из файла, но не внутри двойных кавычек
  • Передавать две (трубчатые) команды оболочки в качестве параметра функции оболочки
  • Вывести вывод сценария bash в строку, которая называется сценарием bash
  • Автоматизация передачи файлов из Windows в Unix
  • Каков наилучший способ сделать функцию bash в скрипте в качестве параметра при запуске через командную строку?
  • Bash - Как найти все файлы НЕ в массиве
  • «Дружественные» имена цветов терминала в сценариях оболочки?
  • 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 - лучшая ОС в мире.