uniq
の高度なオプションと実用的なアプリケーション
これまでに uniq
の基本的な使い方と sort
との組み合わせ方を学びました。次に、uniq
コマンドの追加オプションをいくつか見ていきましょう。これらのオプションにより、uniq
はデータ処理タスクでさらに強力なツールになります。
-c
で出現回数をカウントする
-c
オプションは、各行の出現回数をカウントします。ファイル内の各一意の行が何回出現するかを知りたい場合に便利です。
sort ~/project/duel_log.txt | uniq -c
以下のような出力が表示されるはずです。
2 potion
2 shield
2 sword
これは、元のファイル内で各項目が 2 回出現していることを示しています。
-d
で重複行のみを見つける
重複行(2 回以上出現する行)のみを見つけたい場合は、-d
オプションを使用できます。
sort ~/project/duel_log.txt | uniq -d
出力:
potion
shield
sword
ファイル内のすべての項目に重複があるため、出力にはすべての項目がリストされています。
一意のエントリのみを含むファイルを作成する
uniq
コマンドをよりよく説明するために、もっと多様な内容を持つ新しいファイルを作成しましょう。
echo -e "apple\napple\napple\nbanana\ncherry\ncherry\ngrape" > ~/project/fruits.txt
このファイルを確認しましょう。
cat ~/project/fruits.txt
出力:
apple
apple
apple
banana
cherry
cherry
grape
では、-u
オプションを使用して、ちょうど 1 回だけ出現するエントリを見つけましょう。
sort ~/project/fruits.txt | uniq -u
出力:
banana
grape
これは、「banana」と「grape」がファイル内で 1 回だけ出現していることを示しています。
実世界のアプリケーション: ログ分析
実世界のアプリケーションをシミュレートするために、簡単なログファイルを作成しましょう。
echo -e "INFO: System started\nERROR: Connection failed\nINFO: User logged in\nWARNING: Low memory\nERROR: Connection failed\nINFO: System started" > ~/project/system.log
では、このログファイルを分析して、どのタイプのメッセージが何回出現するかを調べましょう。
cat ~/project/system.log | sort | uniq -c
出力は以下のようになるはずです。
2 ERROR: Connection failed
2 INFO: System started
1 INFO: User logged in
1 WARNING: Low memory
これにより、ログファイル内のイベントのタイプとその頻度がすぐにわかります。
また、cut
コマンドを使用して、メッセージのタイプ(INFO、ERROR、WARNING)のみを抽出することもできます。
cat ~/project/system.log | cut -d: -f1 | sort | uniq -c
出力:
2 ERROR
3 INFO
1 WARNING
この分析により、6 つのログエントリのうち、3 つが INFO メッセージ、2 つが ERROR メッセージ、1 つが WARNING メッセージであることがわかります。
これらの例は、sort
、uniq
、cut
などの単純なコマンドを組み合わせることで、Linux で強力なデータ処理パイプラインを作成できることを示しています。