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


11

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

コマンドの使用方法を理解し、コマンドに関する知識を広げられるように、コマンドと説明を入手できれば、素晴らしいことです!


回答:


21

これは組み込みコマンドで簡単に行えます。

  • ファイルの内容をフィードしますsort。次のステップでこれが必要です。
  • これはに行きuniq -cます。各行の一意の発生をカウントします。同様の行が隣接していない場合、これは前にソートしなければ機能しませんでした。
  • 次に、それを別のにフィードしますsort。これは、逆順(r)でソートされnuniq出力の数値()解釈に基づいています。そうしないと、数値の前のスペースが間違った結果につながるため、数値オプションが必要です(詳細については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!

最初のコマンドからの出力ですが、次から2のみを選択しheadます。

6 Hello there!
3 Look at me!

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

Hello there!
Look at me!

1
を使用する前に並べ替える必要がありますuniq
cYrus

@slhck:ありがとうつの質問:!sort -rn逆の順序でソートがソートフィールドとして番号を使用することにより、生成された各ラインの隣のuniq -c?私はそのような何かと思ったk1か、そのようなものが使用されるだろう
ジム・

@Jimまさに。rが逆になり、nによって生成された数値を数値的に並べ替えuniqます 正確にはどういう意味k1ですか?
-slhck

@slhck:私はこれらのコマンドを使用manして理解しようとしていましたが、-kソートするフィールドを選択するには何かを使用する構文を使用する必要があることを理解しました
ジム

@cYrus:事前にソートが必要なエッジケースは何ですか?
ジム

3

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

cat your_file | logtop

ログファイルのようにファイルが常に成長している場合は、次を試してください。

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