줄 중간에 합계를 인쇄하려고 합니다. 내 스크립트는 사용자 이름을 묻는 메시지를 표시한 다음 파일에서 해당 사용자의 총 프로세스 수와 총 시간을 추출합니다.
문장 중간에 전체 숫자가 포함된 문장을 인쇄하고 싶습니다.
을 사용하면 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
쉘 스크립트가 $u
options 를 통해 쉘 변수를 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"