
そのため、最後のシステムの再起動後に最後にログインしたクラスを表示するファイルを作成するように指示され、文字列を含む行数をlast > lastloggedin
計算/決定する名前のAwkスクリプトを作成するように求められました。myawk
lastloggedin
CFS264
私はやった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」になるまでの範囲を指定します。