Linuxコマンド辞典 uniqコマンド(テキスト処理)

ファイルの中で重複行を削除する「uniq」コマンドの概要と使い方を記載しています。

RHEL Fedora CentOS Vine Deblan Ubuntu Plamo

参考サイト:Man page of INSTALL

概要・使用方法

入力されたファイルの内容を1行ずつ読み込み、連続して出現する内容を1行に集約して出力します。入力ファイルが指定されていない、「-」が指定されている場合は、標準入力を処理します。入力はソート(並び替え)されている必要があります。

ソートを行う場合は、sortコマンドを使用します。特にアプリケーションログやWebサーバー等のアクセスログを調査する場合などに使用することが多いです。awkコマンド、sortコマンド、uniqコマンドのこの3つのコマンドは、サーバー管理者であればよく使用するコマンドになります。

書式

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

オプション

-c
–count
重複数行数を行頭に付加して出力する
-f 項目数
–skip-chars=文字数
空白かタブで区切られた「フィールド」数をスキップして同一行かを判断する
-s 文字数
–skip-chars=文字数
文字数をスキップして同一行かを判断する
-i
–ignore-case
大文字や小文字の区別を無視する
-d
–repeated
重複行がある行のみを表示する
-u
–unique
重複しない行のみを表示する
-w 文字数
–check-chars=文字数
各行の指定した文字数のみを重複判断する。
「-fオプション」や-「sオプション」を合わせた場合は、スキップ後の文字数をチェックする
-z
–zero-terminated
行末をNULL文字にし改行しない

ファイルの先頭から任意の行数を表示する

連続している重複行を削除する

$ uniq ファイル名

実行結果

[sunarin@localhost work]$ cat test.txt 
a
a
b
b
c
c
c
d
e
f
g
f

[sunarin@localhost work]$ uniq test.txt 
a
b
c
d
e
f  #<連続していないため重複行を削除せず
g
f #<連続していないため重複行を削除せず

[sunarin@localhost work]$ 

ソート後に重複行を取り除く

重複行を取り除くためには、並べ替えが必要であるため、sortコマンドを|(パイプ)で繋いで、uniqコマンドの標準入力に渡すことで、ソートされていないテキストファイルの重複行を取り除くことができます。

$ sort ファイル名 | uniq

実行結果

[sunarin@localhost work]$ sort test.txt |uniq
a
b
c
d
e
f
g
[sunarin@localhost work]$ 

重複している行数を先頭に表示

-cオプションを使用することで、先頭に重複している行数(カウント)を表示することができます。

$ sort ファイル名 | uniq -c

実行結果

[sunarin@localhost work]$ sort test.txt |uniq -c
      2 a
      2 b
      3 c
      1 d
      1 e
      2 f
      1 g
[sunarin@localhost work]$ 

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

-Uオプションを使用することで、重複していない行数を表示することができます。

$ sort ファイル名 | uniq -U

実行結果

[sunarin@localhost work]$ sort test.txt |uniq -u
d
e
g
[sunarin@localhost work]$