
1 行にさまざまな単語が含まれるテキスト ファイルがあります。
ファイル内で最も頻繁に出現する 12 行を見つけて表示するにはどうすればよいですか?
スクリプト コマンドはあまり得意ではありません。
コマンドとその説明を入手して、その使用方法を理解し、コマンドに関する知識を広げることができれば素晴らしいと思います。
答え1
組み込みコマンドを使用すると、これを簡単に実行できます。
- ファイルの内容をフィードします
sort
。これは次のステップで必要になります。 - これは に進みます
uniq -c
。各行の一意の出現をカウントします。類似の行が隣接していない場合、これは以前にソートせずには機能しませんでした。 - 次に、それを別の に渡します
sort
。これは逆順 (r
) でソートし、出力の数値 (n
) の解釈に基づいてソートしますuniq
。数値オプションが必要なのは、そうでないと、数字の前のスペースによって間違った結果が生じるためです (GNUsort
の助け多くのための)。 - 最後に、最初の 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!
答え2
ディストリビューションにログトップ
cat your_file | logtop
ログ ファイルのようにファイルが常に大きくなっている場合は、次を試してください。
tail -f your_log | logtop