[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 | 大文字小文字を無視して比較します。これにより、例えば abc と ABC は同じ行として扱われます。 |
-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
で必要なデータを抽出し、sort
とuniq
で整理することができます。
cutコマンドとuniqコマンドの併用
cut
コマンドを使用して特定のフィールドを抽出し、その後にuniq
コマンドで重複行を削除することもできます。
以下のコマンドは、input.txt
の1列目を抽出し、重複行を削除します。
cut -d ',' -f 1 input.txt | sort | uniq > output.txt
このコマンドでは、カンマ区切りのファイルから1列目を抽出し、重複行を削除してoutput.txt
に保存します。
これにより、特定のフィールドに基づいたユニークなデータを得ることができます。
応用例
uniq
コマンドは、さまざまなシナリオで活用できる強力なツールです。
以下に、具体的な応用例を紹介します。
ログファイルから重複するエントリを削除する
ログファイルには、同じエントリが何度も記録されることがあります。
これらの重複エントリを削除するには、sort
とuniq
を組み合わせて使用します。
以下のコマンドは、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
に保存します。
大量データの中からユニークな行を抽出する
大量のデータが含まれるファイルからユニークな行を抽出する場合、sort
とuniq
を使用します。
以下のコマンドは、large_data.txt
からユニークな行を抽出し、結果をunique_large_data.txt
に保存します。
sort large_data.txt | uniq > unique_large_data.txt
この方法で、大量データの中から重複を排除したユニークな行を得ることができます。
複数ファイルの内容を比較して重複行を削除する
複数のファイルの内容を比較して重複行を削除するには、cat
コマンドを使用してファイルを結合し、その後にsort
とuniq
を適用します。
以下のコマンドは、file1.txt
とfile2.txt
の内容を結合し、重複行を削除してunique_combined.txt
に保存します。
cat file1.txt file2.txt | sort | uniq > unique_combined.txt
この方法で、複数のファイルから重複行を排除し、整理された結果を得ることができます。
よくある質問
まとめ
この記事では、uniq
コマンドの基本的な使い方やオプション、他のコマンドとの組み合わせ、さらには実践的な応用例について詳しく解説しました。
これにより、テキストファイル内の重複行を効果的に処理する方法が明らかになりました。
今後は、実際のデータ処理においてuniq
コマンドを活用し、効率的にデータを整理することをお勧めします。