Awkでパターンに一致するレコードをカウントする


12

だから私はlast > lastloggedin最後のシステム再起動以降のクラスの最後のログインを示すファイルを作成するように言われました、そして今私は文字列myawklastloggedin含む行数を数える/決定する という名前のAwkスクリプトを書くように求められますCFS264

終わったよ grep -c CFS264 lastloggedin


使用する必要がありますawkか?そうでない場合は、を使用できますgrep -c CFS264 lastloggedin | wc -l
アクセル

2
@Axel:grep -c (something) (something) | wc -l、常に "1"を生成。
G-Manは、「モニカの復活」を2014

回答:


21

はじめに、次のawkような文字列を含むファイル内の行を検索するために使用できます。

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

のビットは、{ .... }その文字列で行数を集計するために必要なコマンドになります。上記が機能していることを確認するにはprint $0、そこでa を使用して、検索文字列を含む行を出力するだけです。

$ 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

申し訳ありませんが、cfs264はユーザー名の一部です。私がこれを理解するのを手伝ってくれる時間を割いてくれてありがとう、私はかなり混乱し、イライラしていました。
TayshaunS 2014年

@TayshaunS-np、大歓迎です。Qと幸運に感謝しawkます。
slm

5

次の例では、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


PS:

man awkさらにヒントをスキャン... ;-)

awk 非常にやりがいがあります。非常に短い時間で多くのことができるようになります...


2

最後には、前回の再起動からのユーザーログインが含まれます。そのため、以下は最後の再起動以降のユーザーのみを印刷します。

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

awkコマンドの最初の部分は範囲を指定します-最初の行から始まり、最初の列が「再起動」されるまで。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.