Bash で重複行を削除する

Olorunfemi Akinlua 2023年6月20日
  1. sortuniq を使用して Bash で重複行を削除する
  2. awk コマンドを使用して Bash で重複行を削除する
Bash で重複行を削除する

エントリが重複していると、Bash スクリプトでさまざまな問題が発生する可能性があります。たとえば、結果が正しくなかったり一貫性がなかったりするだけでなく、スクリプトの保守が困難になる可能性もあります。 これらの問題を回避するには、多くの場合、スクリプトから重複するエントリを削除する必要があり、Bash でこれを行う方法は多数あります。

sortuniq を使用して Bash で重複行を削除する

Bash スクリプトで重複するエントリを削除する方法の 1つは、sort および uniq コマンドを使用することです。 sort コマンドは指定された順序で入力データを並べ替え、uniq コマンドは並べ替えられたデータから重複する行を除外します。

data.txt ファイルには、この記事の例として以下の内容が含まれています。

arg1
arg2
arg3
arg2
arg2
arg1

上記のファイルから重複するエントリを削除するには、次のコマンドを使用できます。

sort data.txt | uniq > data-unique.txt

出力 (touch data-unique.txt):

arg1
arg2
arg3

このコマンドは、data.txt ファイルを昇順 (デフォルト) でソートし、出力を uniq コマンドにパイプします。 uniq コマンドは、並べ替えられたデータから重複する行を除外し、結果を data-unique.txt という新しいファイルに書き込みます。

これにより、data.txt ファイルからすべての重複エントリが削除され、一意のエントリを持つ新しいファイルが作成されます。

uniq コマンドには、重複行のみを表示する -d オプションや、各行の出現回数を表示する -c オプションなど、その動作を制御するために使用できるいくつかのオプションがあります。 入力で。 たとえば、data.txt ファイルの各行の出現回数を出力するには、次のコマンドを使用できます。

sort data.txt | uniq -c

このコマンドは前のコマンドに似ていますが、uniq コマンドに -c オプションが追加されています。 これにより、各行が入力に表示される回数と行自体が出力されます。

たとえば、結果は次のようになります。

2 arg1
3 arg2
1 arg3

この出力は、Line 1 が表示されていることを示しています。

awk コマンドを使用して Bash で重複行を削除する

Bash スクリプトで重複するエントリを削除する別の方法は、テキスト ファイルに対して多数の操作を実行できる強力なテキスト処理ツールである awk コマンドを使用することです。 awk コマンドには組み込みの連想配列データ構造があり、入力内の各行の出現回数を保存およびカウントできます。

たとえば、以前と同じファイルから重複するエントリを削除するには、次のコマンドを使用できます。

awk '!a[$0]++' data.txt > data-unique.txt

出力:

arg1
arg2
arg3

このコマンドは、awk コマンドを使用して data.txt ファイルを読み取り、各入力行に単純な条件を適用します。 条件は !a[$0]++ 式を使用します。この式は、読み取り行ごとに a 配列の値をインクリメントします。

これは、各行が入力に現れる回数を効果的にカウントし、そのカウントを a 配列に格納します。

awk コマンドは、! を適用します。 配列要素の値を否定する a[$0] 式への演算子。 これは、a 配列でカウントが 0 の行のみが条件を通過し、出力に出力されることを意味します。 出力は、data-unique.txt という名前の新しいファイルにリダイレクトされ、data.txt ファイルからの一意のエントリが含まれます。

awk コマンドは、その動作を制御し、その出力をカスタマイズするために使用できるいくつかのオプションと機能も提供します。 たとえば、-F オプションを使用して別のフィールド セパレータを指定したり、-v オプションを使用してスクリプト内の変数を定義したりできます。

printf 関数を使用して、awk コマンドの出力をさまざまな方法でフォーマットすることもできます。

sort および uniq コマンドは、重複するエントリを削除するためのシンプルで効率的なツールです。awk コマンドは、スクリプトの出力と動作をカスタマイズするためのより高度な機能とオプションを提供します。

Olorunfemi Akinlua avatar Olorunfemi Akinlua avatar

Olorunfemi is a lover of technology and computers. In addition, I write technology and coding content for developers and hobbyists. When not working, I learn to design, among other things.

LinkedIn

関連記事 - Linux File