Movatterモバイル変換


[0]ホーム

URL:


hydroculのメモ >コマンドの使い方(Linux) >uniq コマンド

uniq コマンド2015/09/25

連続して重複した行を1つにまとめるコマンド。

foo.txt が以下の内容の場合、

$ cat foo.txt3333444411111111333333334444

uniq を使うと以下のようになる。

$ cat foo.txt | uniq33334444111133334444

連続していない離れた重複行も削除したければ、sortコマンドコマンドで予めソートする必要がある。その代わり順番は保存されない。

$ cat foo.txt | sort | uniq111133334444

インストール2016/03/17

Coreutilsというパッケージに入っているので、CentOSにもUbuntuにも始めから入っている。

オプション2016/05/10

-c
重複している行数を先頭に付加する。重複していない行は1になる。
-d
逆に重複している行のみを抽出する。2行以上同じ行が連続した場合にそれを1行のみ出力する。
-D
逆に重複している行のみを重複のまま抽出する。
-u
重複した行をまとめるのではなく削除してしまう。
--help
ヘルプ表示
--version
バージョン表示

-- というパラメータを渡すとそれ以降のパラメータをオプションではなくファイル名とみなしてくれるので、- で始まるファイル名を扱いたい場合に使うとよい。

-c オプションの例2015/09/25

-c オプションは行数を各行の先頭に付けてくれる。自分の環境では各行がインデントされているがなぜだろう?

$ cat foo.txt3333444411111111333333334444$ cat foo.txt | uniq -c      1 3333      1 4444      2 1111      2 3333      1 4444

-d,-D オプションの例2015/09/25

-d オプションは重複していた行のみを出力する。-c オプションで2以上になる行のみだ。重複行は1行にまとめられる。

-D オプションは重複していた行を、重複したまま出力する。

$ cat foo.txt3333444411111111333333334444$ cat foo.txt | uniq -d11113333$ cat foo.txt | uniq -D1111111133333333

-u オプションの例2015/09/25

-u オプションは-d オプションとは逆に重複していない行のみを出力する。-c オプションで1になる行のみだ。

$ cat foo.txt3333444411111111333333334444$ cat foo.txt | uniq -u333344444444

HOWTO

日本語を含むファイルを処理するには2014/09/16

漢字やひらがな/カタカナなどが含まれる日本語テキストは、うまくユニーク判定できない場合があるみたいで、その場合は環境変数LC_ALL=C またはLANG=ja_JP.UTF-8 を設定するとよいみたい。

cat foo.txt | LC_ALL=C uniq

これはsortコマンドでも事情が同じ。

重複している数の多い順にソートするには2015/08/19

foo.txt というファイルが以下の内容だったとして、

aaabbbaaacccaaabbbaaa

次のコマンドを実行すると

cat foo.txt | sort | uniq -c | sort -k1 -n -r

次のような結果が表示される。

4 aaa2 bbb1 ccc

sortコマンドを2回使っている。

foo.txt に日本語が含まれている場合は、以下のようにLC_ALL=C という環境変数を設定したほうがよい。

cat foo.txt | LC_ALL=C sort | LC_ALL=C uniq -c | sort -k1 -n -r
このサイトは筆者(hydrocul)の個人メモの集合です。すべてのページは永遠に未完成です。

[8]ページ先頭

©2009-2025 Movatter.jp