Linux Command Line

Linuxファイルの一意な行を効率的に数える

Spread the love

Linuxでファイルの一意な行数を数えることはよくある作業です。この記事では、sortuniqを使う方法、そしてawkを使う方法という2つの効率的なコマンドラインの方法を紹介します。

目次

sortuniqを使った一意な行数のカウント

この方法は、sortuniqの機能を組み合わせて、簡単なアプローチを実現します。sortは行をアルファベット順に並べ替えます。これは、連続する同一の行のみをカウントするuniqの前提条件です。uniq-cオプションは、各行の前にカウントの接頭辞を追加します。

file.txtの一意な行数をカウントするには:


sort file.txt | uniq -c

これにより、各一意な行とそのカウントが表示されます。一意な行の総数を得るには、出力をwc -lにパイプします:


sort file.txt | uniq -c | wc -l

例:

file.txtに以下の内容が含まれている場合:


apple
banana
apple
orange
banana
apple

sort file.txt | uniq -cは以下を出力します:


      3 apple
      2 banana
      1 orange

そしてsort file.txt | uniq -c | wc -lは以下を出力します:


3

awkを使った一意な行数のカウント

awkは、特に複雑なシナリオで役立つ柔軟なソリューションを提供します。この方法は、一意な行とそのカウントを追跡するために連想配列を使用します。

一意な行とそのカウントを表示するには:


awk '{count[$0]++} END {for (line in count) print count[line], line}' file.txt

このスクリプトは、行をキーとして使用して、count配列内の各行のカウントを増分します。ENDブロックは配列を反復処理し、各行のカウントと行自体を出力します。

一意な行の総数のみを取得するには:


awk '{count[$0]++} END {print length(count)}' file.txt

これはlength(count)を使用して、一意な行の数(配列のサイズ)を直接出力します。

例:

同じfile.txtを使用すると、最初のawkコマンドはsort | uniq -cメソッドと同じ出力を生成します。2番目のawkコマンドは3を出力し、3つのユニークな行を示します。

ニーズに最適な方法を選択してください。sortuniqは基本的なタスクにはシンプルです。awkは複雑なシナリオでより大きな柔軟性を提供します。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です