だから私はlast > lastloggedin
を行うように言われました。これは、最後のシステム再起動以降のクラスの最後のログインを示すファイルを作成し、myawk
という名前のAwkスクリプトを書くように求められます。文字列CFS264
を含むlastloggedin
の行数。
完了しましたgrep -c CFS264 lastloggedin
はじめに、awk
を使用して、次のような文字列を含むファイル内の行を検索できます。
$ awk '/CFS264/ { .... }' lastloggedin
{ .... }
のビットは、その文字列で行数を集計するために必要なコマンドになります。上記が機能していることを確認するには、print $0
を使用して、検索文字列を含む行を出力します。
$ awk '/CFS264/ { print $0 }' lastloggedin
カウントに関して、「awkカウンター」を検索すると、これに遭遇しますSO Q&Aタイトル: awkを使用してレコード数をカウントしない 。あなたが説明することには十分です:
$ awk '/CFS264/ {count++} END{print count}' lastloggedin
$ last > lastloggedin
$ awk '/slm/ {count++} END {print count}' lastloggedin
758
$ grep slm lastloggedin | wc -l
758
$ grep -c slm lastloggedin
758
注:CFS264がlast
の出力でどのフィールドに関連するかは言いません。それがユーザー名だとすると、awk
コマンドをさらに制限して、次のようにそのフィールドのみを検索することができます。
$ awk '$1=="CFS264" { print $0 }' lastloggedin
次の例は、lastloggedin
ファイルを必要とせずに、私が言及された時間をカウントします。
$ last | awk '$1=="yeti" { ++count } END { print count }'
106
lastloggedin
ファイルの使用を強制したり、強制的に使用したりする場合は、次の方法で行うことができます。
$ last > lastloggedin
$ awk '$1=="yeti" { ++count } END { print count }' lastloggedin
106
使用する $1~/some_chars/
指定した文字を含むすべてのユーザー名を取得するには$1~/^prefix/
は、prefix
で始まる名前のみに一致します。
$ last | awk '$1~/et/ { ++count } END { print count }'
106
$ last | awk '$1~/^ye/ { ++count } END { print count }'
106
スキャンman awk
より多くのヒント... ;-)
awk
は非常にやりがいのあるものです。非常に短時間の学習で多くのことができるようになります...
最後には、前回の再起動からのユーザーログインが含まれます。そのため、以下は最後の再起動以降のユーザーのみを印刷します。
last | awk 'NR==1,$1=="reboot"{if ($1 ~ /cfs264/ ) { count+=1; }}END{ print count; }'
Awkコマンドの最初の部分は範囲を指定します-最初の行から始まり、最初の列が「再起動」されるまで。