2016-03-21 14 views
0

シェルプログラミングの新機能です。1日あたりのログイン数をカウントするシェルスクリプト

123 Mon 
231 Tue 
555 Wed 
21 Thu 
44 Fri 
123 Sat 
10 Sun 

私が使用してそれを実行しようとしました:私は

出力は次のようになります。いくつかのマシン上のユーザーのための曜日ごとのログイン数をカウントするシェルスクリプトを記述しようとしています最後に、uniqのコマンドと、この

last -s -7days | awk '{print $1, $4,$5,$6}' | uniq -cd |sort -u 

のように並べ替えが、私は何とか重複した結果を得ているので、私は何かが欠けていると思います。また、全体的なカウントを日数で区切る方法もわかりません。

答えて

1

uniqの問題は、隣接する重複する行だけを折りたたむことです。あなたのケースでは、uniqの-dが重複する行を分割している行を隠しているので、その日のログイン試行の間にreboot 4.4.5-1-ARCH Wed Marのような行がいくつかあると思います。また、他のユーザーのカウントを分割する複数のユーザーのログインにも問題があります。

通常、ユニークな行のリストを取得するにはsort | uniqですが、-dを削除すると、不要な行が表示されます。これらは、sort | uniqの前または後に別々にフィルタリングするのが最適です。

最後に、最後のsort -uは、2つの行が正確に一致するとデータを削除しますが、これはあなたが望むものではないと思います。代わりに、カウントを並べ替える必要がある場合は、-k FILENUM引数で気にする別の列(月のロールオーバーに小さな問題が発生します)で日付列を並べ替える方が良いです。

が一緒にこれを組み合わせて、あなたが得る:.../reboot/ {next};...原因は/秒以内のパターンと一致する行を無視するようにawkのこと

last -s -7days | awk '/reboot/ {next}; /wtmp/ {next}; /^$/ {next}; {print $1, $4,$5,$6}' | sort | uniq -c | sort -k 5 

は注意してください。

関連する問題