行の途中で合計を印刷しようとしています。私のスクリプトはユーザー名の入力を求め、ファイルからそのユーザーのプロセスの総数と合計時間を抽出します。
文の途中に全数字を含む文を印刷したいと思います。
を使用すると、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"