Linuxでファイルの一意な行数を数えることはよくある作業です。この記事では、sort
とuniq
を使う方法、そしてawk
を使う方法という2つの効率的なコマンドラインの方法を紹介します。
目次
sort
とuniq
を使った一意な行数のカウント
この方法は、sort
とuniq
の機能を組み合わせて、簡単なアプローチを実現します。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つのユニークな行を示します。
ニーズに最適な方法を選択してください。sort
とuniq
は基本的なタスクにはシンプルです。awk
は複雑なシナリオでより大きな柔軟性を提供します。