[linux] uniqコマンドの使い方 – テキストファイルの重複行の表示・削除

uniqコマンドは、ソート済みのテキストファイルから連続する重複行を削除または表示するために使用されます。

基本的な使い方は、uniq [オプション] [入力ファイル] [出力ファイル]です。

重複行を削除するには、ファイルを事前にsortコマンドでソートする必要があります。

-dオプションで重複行のみを表示し、-uオプションで一度しか現れない行を表示します。

-cオプションを使うと、各行の出現回数を表示できます。

この記事でわかること
  • uniqコマンドの基本的な使い方
  • 重複行を削除する方法
  • 他のコマンドとの組み合わせ
  • 応用例による実践的な活用
  • オプションを使った柔軟な処理

目次から探す

uniqコマンドとは

uniqコマンドは、LinuxやUnix系のオペレーティングシステムで使用されるコマンドの一つで、テキストファイル内の重複行を処理するために利用されます。

このコマンドは、主に連続する重複行を削除したり、重複行の出現回数をカウントしたりする機能を持っています。

uniqは、通常、sortコマンドと組み合わせて使用されることが多く、まずファイルをソートしてから重複行を処理することで、正確な結果を得ることができます。

例えば、ログファイルやデータセットの中からユニークなエントリを抽出したり、重複を排除したりする際に非常に便利です。

uniqコマンドは、シンプルでありながら強力なツールであり、データの整理や分析に役立ちます。

uniqコマンドの基本的な使い方

重複行を削除する

uniqコマンドを使用して、テキストファイル内の重複行を削除するには、以下のようにコマンドを実行します。

まず、ファイルをソートしてからuniqを適用することが一般的です。

sort input.txt | uniq > output.txt

このコマンドは、input.txtの重複行を削除し、結果をoutput.txtに保存します。

重複行を表示する

重複行を表示するには、-dオプションを使用します。

このオプションを指定すると、重複している行のみが出力されます。

sort input.txt | uniq -d

このコマンドは、input.txt内の重複行を表示します。

重複行をカウントする

重複行の出現回数をカウントするには、-cオプションを使用します。

このオプションを指定すると、各行の前にその行の出現回数が表示されます。

sort input.txt | uniq -c

このコマンドは、input.txt内の各行の出現回数を表示します。

重複していない行を表示する

重複していない行のみを表示するには、-uオプションを使用します。

このオプションを指定すると、一度も重複しなかった行だけが出力されます。

sort input.txt | uniq -u

このコマンドは、input.txt内の重複していない行を表示します。

uniqコマンドのオプション一覧

uniqコマンドには、さまざまなオプションが用意されており、用途に応じて使い分けることができます。

以下に主要なオプションをまとめました。

スクロールできます
オプション説明
-c行の出現回数を表示します。各行の前にその行の出現回数が表示されます。
-d重複行のみを表示します。重複している行だけが出力されます。
-u一度しか現れない行を表示します。重複しない行だけが出力されます。
-i大文字小文字を無視して比較します。これにより、例えば abcABC は同じ行として扱われます。
-f N指定したフィールドを無視して比較します。Nには無視したいフィールドの数を指定します。
-s N指定した文字数を無視して比較します。Nには無視したい文字数を指定します。
-w N指定した文字数だけを比較します。Nには比較する文字数を指定します。

これらのオプションを組み合わせることで、より柔軟にデータを処理することが可能です。

例えば、特定のフィールドを無視して重複行を削除したり、大文字小文字を無視して比較したりすることができます。

uniqコマンドの実践例

ファイル内の重複行を削除する

テキストファイル内の重複行を削除する基本的な方法は、sortコマンドとuniqコマンドを組み合わせることです。

以下のコマンドを実行すると、input.txtの重複行が削除され、結果がoutput.txtに保存されます。

sort input.txt | uniq > output.txt

このコマンドを実行した後、output.txtには重複行が削除された内容が含まれます。

重複行の出現回数を確認する

ファイル内の各行の出現回数を確認するには、-cオプションを使用します。

以下のコマンドを実行すると、input.txt内の各行の出現回数が表示されます。

sort input.txt | uniq -c

出力結果は、各行の前にその行の出現回数が表示されます。

特定のフィールドを無視して重複行を削除する

特定のフィールドを無視して重複行を削除するには、-fオプションを使用します。

例えば、最初のフィールドを無視して重複行を削除する場合、以下のようにコマンドを実行します。

sort input.txt | uniq -f 1 > output.txt

このコマンドでは、最初のフィールドを無視して重複行が削除され、結果がoutput.txtに保存されます。

大文字小文字を無視して重複行を削除する

大文字小文字を無視して重複行を削除するには、-iオプションを使用します。

以下のコマンドを実行すると、input.txt内の大文字小文字を無視して重複行が削除されます。

sort input.txt | uniq -i > output.txt

このコマンドを実行した後、output.txtには大文字小文字を無視した重複行が削除された内容が含まれます。

uniqコマンドと他のコマンドの組み合わせ

uniqコマンドは、他のコマンドと組み合わせることで、より強力なデータ処理が可能になります。

以下に、代表的なコマンドとの併用例を紹介します。

sortコマンドとuniqコマンドの併用

sortコマンドとuniqコマンドは非常に相性が良く、重複行を削除する際には必ずsortを先に実行する必要があります。

以下のコマンドは、input.txtの重複行を削除し、結果をoutput.txtに保存します。

sort input.txt | uniq > output.txt

この組み合わせにより、正確な重複行の削除が実現できます。

grepコマンドとuniqコマンドの併用

grepコマンドを使用して特定のパターンを含む行を抽出し、その後にuniqコマンドで重複行を削除することができます。

以下のコマンドは、input.txtから error を含む行を抽出し、重複行を削除します。

grep "error" input.txt | uniq > output.txt

この方法で、特定の条件に合致するユニークな行を得ることができます。

awkコマンドとuniqコマンドの併用

awkコマンドを使用して特定の列を抽出し、その後にuniqコマンドで重複行を削除することも可能です。

以下のコマンドは、input.txtの2列目を抽出し、重複行を削除します。

awk '{print $2}' input.txt | sort | uniq > output.txt

このように、awkで必要なデータを抽出し、sortuniqで整理することができます。

cutコマンドとuniqコマンドの併用

cutコマンドを使用して特定のフィールドを抽出し、その後にuniqコマンドで重複行を削除することもできます。

以下のコマンドは、input.txtの1列目を抽出し、重複行を削除します。

cut -d ',' -f 1 input.txt | sort | uniq > output.txt

このコマンドでは、カンマ区切りのファイルから1列目を抽出し、重複行を削除してoutput.txtに保存します。

これにより、特定のフィールドに基づいたユニークなデータを得ることができます。

応用例

uniqコマンドは、さまざまなシナリオで活用できる強力なツールです。

以下に、具体的な応用例を紹介します。

ログファイルから重複するエントリを削除する

ログファイルには、同じエントリが何度も記録されることがあります。

これらの重複エントリを削除するには、sortuniqを組み合わせて使用します。

以下のコマンドは、access.logから重複エントリを削除し、結果をunique_access.logに保存します。

sort access.log | uniq > unique_access.log

この方法で、ログファイルを整理し、重複を排除することができます。

CSVファイルの特定列を無視して重複行を削除する

CSVファイルの特定の列を無視して重複行を削除する場合、cutコマンドとuniqコマンドを組み合わせて使用します。

以下のコマンドは、data.csvの2列目を無視して重複行を削除します。

cut -d ',' -f 1,3 data.csv | sort | uniq > unique_data.csv

このコマンドでは、1列目と3列目を抽出し、重複行を削除してunique_data.csvに保存します。

大量データの中からユニークな行を抽出する

大量のデータが含まれるファイルからユニークな行を抽出する場合、sortuniqを使用します。

以下のコマンドは、large_data.txtからユニークな行を抽出し、結果をunique_large_data.txtに保存します。

sort large_data.txt | uniq > unique_large_data.txt

この方法で、大量データの中から重複を排除したユニークな行を得ることができます。

複数ファイルの内容を比較して重複行を削除する

複数のファイルの内容を比較して重複行を削除するには、catコマンドを使用してファイルを結合し、その後にsortuniqを適用します。

以下のコマンドは、file1.txtfile2.txtの内容を結合し、重複行を削除してunique_combined.txtに保存します。

cat file1.txt file2.txt | sort | uniq > unique_combined.txt

この方法で、複数のファイルから重複行を排除し、整理された結果を得ることができます。

よくある質問

uniqコマンドはなぜソートが必要なのですか?

uniqコマンドは、連続する重複行を処理するためのコマンドです。

そのため、重複行を削除するためには、まずファイルをソートしておく必要があります。

ソートを行うことで、同じ内容の行が隣接するようになり、uniqコマンドが正しく重複を認識して削除できるようになります。

もしソートを行わない場合、重複行が離れた位置に存在するため、uniqはそれらを重複として扱わず、結果として削除されないことになります。

uniqコマンドで重複行が削除されないのはなぜですか?

uniqコマンドで重複行が削除されない主な理由は、行が連続していない場合です。

uniqは連続する重複行のみを削除するため、ファイルがソートされていないと、同じ内容の行が離れた位置に存在することになります。

この場合、uniqはそれらを重複として認識せず、削除しません。

重複行を削除したい場合は、必ず事前にsortコマンドを使用してファイルをソートする必要があります。

uniqコマンドで特定の列だけを比較することはできますか?

はい、uniqコマンドでは特定の列だけを比較することが可能です。

これを実現するためには、-fオプションを使用します。

このオプションを指定することで、指定したフィールドを無視して重複行を比較することができます。

例えば、最初のフィールドを無視して重複行を削除したい場合は、以下のようにコマンドを実行します。

sort input.txt | uniq -f 1

このコマンドでは、最初のフィールドを無視して重複行を削除します。

これにより、特定の列に基づいた重複行の処理が可能になります。

まとめ

この記事では、uniqコマンドの基本的な使い方やオプション、他のコマンドとの組み合わせ、さらには実践的な応用例について詳しく解説しました。

これにより、テキストファイル内の重複行を効果的に処理する方法が明らかになりました。

今後は、実際のデータ処理においてuniqコマンドを活用し、効率的にデータを整理することをお勧めします。

  • URLをコピーしました!
目次から探す