텍스트 출력 중간에 awk에서 파생된 합계를 입력하는 방법 [닫기]

텍스트 출력 중간에 awk에서 파생된 합계를 입력하는 방법 [닫기]

줄 중간에 합계를 인쇄하려고 합니다. 내 스크립트는 사용자 이름을 묻는 메시지를 표시한 다음 파일에서 해당 사용자의 총 프로세스 수와 총 시간을 추출합니다.

문장 중간에 전체 숫자가 포함된 문장을 인쇄하고 싶습니다.

을 사용하면 awk총 프로세스 수와 분을 얻을 수 있지만 문장 중간에 방정식 결과를 인쇄할 수는 없습니다. 내 방정식의 결과는 문장 뒤에 표시됩니다.

HTML처럼 앵커를 사용해야 할 것 같아요. 퍼티를 사용하고 있습니다.

 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"
    ;;

입력한 특정 사용자 이름에 대한 총 프로세스 수와 시간(분)을 얻고 싶습니다. 그런 다음 해당 숫자가 속한 문장에 숫자를 삽입하세요.

답변1

다음 스크립트는 프롬프트 대신 명령줄에서 인수를 가져옵니다. 이렇게 하면 다른 스크립트에서 재사용하기가 더 쉬워지고 사용자가 여러 사용자 이름을 지정할 수 있습니다.

$ cat jake.sh 
#! /bin/sh

inputfile='input.txt'

for u in "$@" ; do
    awk -F'|' -v u="$u" '$1 == u { sum = sum + $3 ; count++} 
        END {print u " has run " count " processes for a total of " \
             sum " minutes."}' < "$inputfile"
done

쉘 스크립트가 $uoptions 를 통해 쉘 변수를 awk 스크립트에 전달하는 방법에 유의하십시오 -v u="$u". 이렇게 하면 쉘을 직접 사용하기 위해 awk 스크립트 주위에 큰따옴표를 사용할 필요가 없습니다 . 이렇게 하면 awk 스크립트의 모든 인스턴스를 백 $u슬래시로 이스케이프해야 하기 때문입니다.$1$3"\

입력은 예제와 동일합니다.

$ 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'|' -v u="$username" '$1 == u { sum = sum + $3 ; count++} 
    END {print u " has run " count " processes for a total of " \
         sum " minutes."}' < "$inputfile"

관련 정보