SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

UNIXコマンド辞典

uniq

ソート後のファイルから重複行を削除する

対応OS: linux , freebsd, solaris

2015/05/20 08:00

uniq [-N] [+N] [-i] [-d] [-u] [INFILE...] [OUTFILE...]

 uniqコマンドは、INFILE...に指定したファイルの内容を読み込み、重複行(同じ内容の行)を取り除いて出力します。つまり複数の行が同一の内容の場合には、1行だけ残して他を取り除きます。OUTFILE...を指定して、出力先を標準出力からOUTFILE...に指定したファイルに切り替えることもできます。

注意

 uniqコマンドは、ソートされていないファイル内容からは正しく重複行を削除することはできません。「sort FILE | uniq」といったように、ソート結果をパイプに通してから実行するのが確実です

オプション
① -N
各行の内容から先頭のN個のフィールドを除いた内容で重複のチェックを行います。フィールドはスペースまたはタブで区切られた文字列です。フィールド数以上の数を「N」に指定すると、何も指定しない場合と同じように、行全体でチェックを行います。
② +N
各行の内容から先頭のNバイトの文字を除いた内容で重複のチェックを行います。
③ -i
大文字と小文字の区別をしません。
④ -d
重複行がある、つまり元々ユニーク(一意)でない行だけを出力します。
⑤ -u
重複行がない、つまり元々ユニークな行だけを出力します。
引数
① INFILE...
重複行を取り除くファイル名をスペースで区切って指定します。ワイルドカードによる指定も可能です。省略すると、標準入力からの入力になります。
② OUTFILE...
結果を出力するファイル名を指定します。省略すると、標準出力に出力します。
重複行を削除する
[takeda]$ sort s01 s02 
1:1:2: 2:1:1
1:1:2: 2:1:1
1:1:2: 2:1:1
重複
2:2:1: 1:2:2
2:2:1: 1:2:2
2:2:1: 1:2:2
重複
3:2:1: 3:1:1
3:2:1: 3:1:2
3:2:1: 3:1:2
重複
3:2:1: 3:2:2
[takeda]$ sort s01 s02 | uniq
ソートしてから重複行を削除
1:1:2: 2:1:1
2:2:1: 1:2:2
3:2:1: 3:1:1
3:2:1: 3:1:2
3:2:1: 3:2:2
[takeda]$
各行の先頭1バイトを除いた内容をチェックして重複行を削除する
[takeda]$ sort s03 s04 | uniq 
1:1:2: 2:1:1
2:2:1: 1:2:2
3:2:1: 1:2:2
3:2:1: 3:1:1
3:2:1: 3:1:2
[takeda]$ sort s03 s04 | uniq +1
オプション「+1」を指定して、1バイト目を除いてチェック
1:1:2: 2:1:1
2:2:1: 1:2:2
3:2:1: 3:1:1
3:2:1: 3:1:2
[takeda]$
元々ユニークでない行だけを表示する
[takeda]$ sort s01 s02 
1:1:2: 2:1:1
1:1:2: 2:1:1
1:1:2: 2:1:1
重複
2:2:1: 1:2:2
2:2:1: 1:2:2
2:2:1: 1:2:2
重複
3:2:1: 3:1:1
3:2:1: 3:1:2
3:2:1: 3:1:2
重複
3:2:1: 3:2:2
[takeda]$ sort s01 s02 | uniq -d
オプション「-d」を指定して、元々ユニークでない行だけを表示
1:1:2: 2:1:1
2:2:1: 1:2:2
3:2:1: 3:1:2
[takeda]$
元々ユニークな行だけを表示する
[takeda]$ sort s01 s02 
1:1:2: 2:1:1
1:1:2: 2:1:1
1:1:2: 2:1:1
重複しているのでユニークではない
2:2:1: 1:2:2
2:2:1: 1:2:2
2:2:1: 1:2:2
重複しているのでユニークではない
3:2:1: 3:1:1
3:2:1: 3:1:2
3:2:1: 3:1:2
重複しているのでユニークではない
3:2:1: 3:2:2
[takeda]$ sort s01 s02 | uniq -u
オプション「-u」を指定して、元々ユニークな行だけを表示
3:2:1: 3:1:1
3:2:1: 3:2:2
結果をファイルに出力する
[takeda]$ cat file01 
a001
a002
a002
a002
重複
a003
a004
A001
A002
A002
A002
重複
A003
[takeda]$ uniq file01
a001
a002
a003
a004
A001
A002
A003
ファイル「file01」の内容から重複行を削除した結果
[takeda]$ uniq file01 file02
ファイル「file01」の内容から重複行を削除した結果をファイル「file02」に出力
[takeda]$ cat file2
a001
a002
a003
a004
A001
A002
A003
HINT!

 sortコマンド・catコマンド

関連タグ

UNIXコマンド辞典トップページに戻る

本コンテンツは「UNIXコマンド辞典 ビギナー編」(2003年)を元にWeb用に再編集したものです
All Contents copyright © 2003-2009 Odyssey Communications Inc., Shoeisha Co., Ltd.

開発者必携!VBAスキルを証明する資格「VBAエキスパート」

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング