Awkを使用してパターンに一致するレコード数を計算する

Awkを使用してパターンに一致するレコード数を計算する

そのため、最後のシステムの再起動後に最後にログインしたクラスを表示するファイルを作成するように指示され、文字列を含む行数をlast > lastloggedin計算/決定する名前のAwkスクリプトを作成するように求められました。myawklastloggedinCFS264

私はやったgrep -c CFS264 lastloggedin

答え1

まず、次のようにawkファイルから文字列を含む行を検索できます。

$ awk '/CFS264/ { .... }' lastloggedin

ビットは、{ .... }その文字列の行数を計算するために必要な命令になります。上記の操作が機能していることを確認するには、print $0検索文字列を含む行を単に印刷するためにaを使用できます。

$ awk '/CFS264/ { print $0 }' lastloggedin

計算に関しては、「awk counter」を検索すると、「awk counter」というタイトルの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

答え2

次の例では、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非常に価値があります。短い学習時間の後には多くのことができます...

答え3

最後の時間には、以前の再起動によるユーザーログインが含まれる場合があります。したがって、次は最後の再起動後にユーザーだけを印刷します。

last | awk 'NR==1,$1=="reboot"{if ($1 ~ /cfs264/ ) { count+=1; }}END{ print count; }'

awkコマンドの最初の部分は、最初の行から始まり、最初の列が「reboot」になるまでの範囲を指定します。

関連情報