【uniq】Linuxで重複した行を抽出・削除するコマンド

uniqコマンドは、テキストファイルの重複した行を出力・削除するコマンドです。sortコマンドと併用することで、便利に使うことができます。

uniqコマンドの使い方

uniqコマンドの書式は以下の通りです。

uniq [オプション] [入力ファイル [出力ファイル]]

uniqコマンドは指定した入力ファイル、または標準入力から重複を取り除きます。出力ファイルを指定した場合は、そのファイルに結果が書き込まれます。出力ファイルを指定しなかった場合は、標準出力に出力されます。

オプション

-c 重複した数を各行の前に出力する
-d 重複した行だけを出力する
-f 行数 指定したフィールドだけ比較をスキップする
-s 文字数 指定した文字数だけ比較をスキップする
-i 大文字と小文字の違いを無視する
-u 重複しない行だけを出力する
-w 文字数 各行で指定した文字数だけ比較を行う

重複した行を削除する

今回は例として members.txt というファイルを使用します。

$ cat members.txt
teacher
teacher
student
teacher
staff
staff

以下は、重複した行を削除し出力する例です。

$ uniq members.txt
teacher
student
teacher
staff

引数で指定したファイルの各行をその前後の行と比較し、重複しない行だけを表示します。

もし離れた行の重複も取り除きたい場合は、sortコマンドで並べ替えてからuniqコマンドを使用します。

$ sort members.txt | uniq
staff
student
teacher

重複した行数を出力する

重複した行数を表示するコマンドを実行する場合は、「-c」オプションを指定します。

$ sort members.txt | uniq -c
   2 staff
   1 student
   3 teacher

各行の先頭に重複した行数が出力されます。

重複しない行を出力する

重複しない行を表示するコマンドを実行する場合は、「-u」オプションを指定します。

$ sort members.txt | uniq -u
student

イベント

2017/12/05(火)
Design Thinking Square