2009-08-11 8 views
4

と私はOS X上でこれを実行する場合:グラブ頻繁にユーザ名 - 例外

last -10 | awk '{print $1}' 

は私が手:
チョップ
チョップ
chrihopk
リブート
チョップ シャットダウン
チョップ
チョップ
チョップ
chrihopk

sedまたはawkを使用して最も頻度の高いユーザー 'チョップ'を取得するにはどうすればよいですか?

質問に追加編集:
私たちのローカル管理者アカウントは結果(ユーザー名:サポート)を妨害し、多くの場合、クライアントボックスに新しい開始者があります。
どのように私は次のことを省略して、最後の有効なユーザ名を返すために

last -1 

を変更することができます:ソートに使用するパイプ場合

おかげ

+0

こんにちはイヤーカ - 申し訳ありませんが、あなたは大丈夫ですが、私はまだこれらのソリューションをテストしており、今質問に追加するつもりです。私はちょうど今プロジェクトをジャグリングしていますが、これに戻ってきました。編集は上記のとおりです。 入力いただきありがとうございます。 Chris – chop

+0

質問をより読みやすくするために、コードやブロッククォートの機能を使用してください。 –

答えて

0

あなたの編集への答えは、lastに数値引数をオフのままにしてegrepを使用

last | egrep -v 'support|reboot|shutdown' 

次にパイプをに入力します。と同じです。

0

サポート
リブート
シャットダウン、私はよく分かりませんが、最も頻繁に利用されているユーザーを見つけるために、簡単に解析できるデータリストが得られます。スクリプト言語を使用しないでそのユーザーを検索します。

9
bash$ last -10 | awk '{print $1}' | sort | uniq -c | sort -nr | head -1 | awk '{print $2}' 

sort -un何かをするが、私は、次のパイプラインは、私は確信しているの出発点は、最適化することができ提供するもの...

bash$ echo -e 'bob\nbob\ncat\ncat\ncat\ndog' 
bob 
bob 
cat 
cat 
cat 
dog 
bash$ echo -e 'bob\nbob\ncat\ncat\ncat\ndog' | sort | uniq -c | sort -nr 
     3 cat 
     2 bob 
     1 dog 
bash$ echo -e 'bob\nbob\ncat\ncat\ncat\ndog' | sort -un 
bob 
bash$ echo -e 'bob\nbob\ncat\ncat\ncat\ndog' | sort | uniq -c | sort -nr | head -n1 | awk '{print $2}' 
cat 
+0

@earcar:毎日新しいことを学びます。それをテストすると、うまくいくようです...私はそれがどういうことになるのか混乱しています。何百万年前の互換性オプションなのでしょうか? – Stobor

+0

これは私にとっても間違いなく機能します。助けてくれてありがとう。 – chop

+0

@eacar:私は 'sort -u'について知っていて、適切なところで使っています...' sort -un'は 'sort -n -u'とは異なる動作をしていると文書化されていますか? – Stobor

1

わからない:

last | awk '{A[$1] += 1; for (v in A) print A[v],v}' | sort -ur | head -n 1 | awk '{print $2}' 
6

希望する場合

  • ログイン数を持つユーザーの素敵な上昇順のリスト($0!~/^$/ものが唯一の空白行はカウントされません保証):ログイン番号と

    last | awk '$0!~/^$/ {print $1}' | sort | uniq -c | sort 
    
  • ユーザ名:

    上記のコードに| tail -1を追加。 (速い)awkでは、上記と同じ

  • :のみawkでは

    last | awk '{a[$1]++}END{m=0;for(v in a){if(a[v]>m){m=a[v];u=v}}print m,u}' 
    
  • ユーザ名:

    上記のコードから最後m,を削除します。

+0

+1が 'sort -un'に+1されていても、その組み合わせが何を言っているのか分かりません... – Stobor

+0

パーフェクト。最初の選択肢はまさに私が後にしているものです。どうもありがとう。 'sort -un'が失敗したために – chop

+0

が編集されました –

2

だけのgawkで

last -10 |awk '{ user[$1]++} 
END{ 
    t=0 
    for(i in user){ 
     if (user[i]>t) { 
      t=user[i] 
      u=i 
     } 
    } 
    print t,u 
}' 

をawkは、あなたがASORTを利用することができ、asorti内部関数

関連する問題