web-dev-qa-db-ja.com

Linuxのファイルから最も一般的に表示される行を取得します

1行にさまざまな単語が含まれるテキストファイルがあります。
ファイル内で最も頻繁に出現する12行を見つけて表示するにはどうすればよいですか?
私はスクリプトコマンドがあまり得意ではありません。

コマンドと説明を入手して、その使い方を理解し、コマンドに関する知識を深めることができれば素晴らしいと思います。

11
Jim

これは、組み込みコマンドを使用して簡単に実行できます。

  • ファイルsortの内容をフィードします。これは次のステップで必要です。
  • これはuniq -cに移動します。各行の一意の出現をカウントします。同様の線が隣接していない場合、これは以前に並べ替えなしでは機能しませんでした。
  • 次に、それを別のsortにフィードします。これは、逆の順序(r)で、n出力の数値(uniq)解釈に基づいてソートされます。 。数値オプションが必要です。そうしないと、数値の前のスペースが間違った結果につながるためです(詳細については、 GNU sortのヘルプ を参照してください)。
  • 最後に、最初の12行のみをheadで表示します。

その場合、コマンドは次のようになります。

sort test.txt | uniq -c | sort -rn | head -n 12

ここでの出力には、実際の発生回数が含まれています。

行の生のリストのみを取得するには、出力をsedにパイプします。

sort test.txt | uniq -c | sort -rn | head -n 12 | sed -E 's/^ *[0-9]+ //g'

例:

I'm not there very often
I'm not there very often
Look at me!
Look at me!
Look at me!
Hello there!
Hello there!
Hello there!
Hello there!
Hello there!
Hello there!

最初のコマンドから出力しますが、headから2を選択するだけです:

6 Hello there!
3 Look at me!

2番目のコマンドからの出力:

Hello there!
Look at me!
21
slhck

ディストリビューションに logtop がある場合

cat your_file | logtop

ログファイルのようにファイルが絶えず大きくなっている場合は、次のことを試してください。

tail -f your_log | logtop
3
Julien Palard