uniq【コマンド】
コマンドだよ
UNIX系で使えるよ
重複行を削除するよ
スポンサーリンク
簡単に書くよ
uniq【コマンド】とは
コンピュータさんに対する命令文(コマンド)のひとつ
であり
重複行を削除するときに使うコマンド
です。
詳しく書くよ
「uniq」コマンドは
テキストファイルなどから他の行と重複する行を削除するときに使うコマンド
です。
UNIX系(LinuxとかMacとか)で使えます。
書き方は
uniq [オプション] [処理対象ファイル] [処理結果ファイル]
です。
オプションは、ちらほらとあります。
| オプション | 説明 |
|---|---|
| -c | 重複した行数を行の先頭に表示する prefix lines by the number of occurrences |
| --count | 重複した行数を行の先頭に表示する prefix lines by the number of occurrences |
| -d | 重複行のみ表示する(複数行の重複は1行にまとめて表示) only print duplicate lines, one for each group |
| --repeated | 重複行のみ表示する(複数行の重複は1行にまとめて表示) only print duplicate lines, one for each group |
| -D | 重複行のみ表示する(複数行の重複もそのまま表示) print all duplicate lines groups can be delimited with an empty line METHOD={none(default),prepend,separate} |
| --all-repeated | 重複行のみ表示する(複数行の重複もそのまま表示) print all duplicate lines groups can be delimited with an empty line METHOD={none(default),prepend,separate} |
| -f【数字】 | 【数字】分のフィールドを読み飛ばすらしいけど、よく分からん avoid comparing the first N fields |
| --skip-fields=N【数字】 | 【数字】分のフィールドを読み飛ばすらしいけど、よく分からん avoid comparing the first N fields |
| --group | 重複行の区切りごとに1行空けて全部表示する show all items, separating groups with an empty line METHOD={separate(default),prepend,append,both} |
| -i | 大文字・小文字を区別しない ignore differences in case when comparing |
| --ignore-case | 大文字・小文字を区別しない ignore differences in case when comparing |
| -s【数字】 | 【数字】分の文字を読み飛ばすらしいけど、よく分からん avoid comparing the first N characters |
| --skip-chars=N【数字】 | 【数字】分の文字を読み飛ばすらしいけど、よく分からん avoid comparing the first N characters |
| -u | 重複しない行のみ表示する only print unique lines |
| --unique | 重複しない行のみ表示する only print unique lines |
| -z | うんちゃらかんちゃら end lines with 0 byte, not newline |
| --zero-terminated | うんちゃらかんちゃら end lines with 0 byte, not newline |
| -w【数字】 | 各行の先頭から【数字】文字で判定する compare no more than N characters in lines |
| --check-chars=【数字】 | 各行の先頭から【数字】文字で判定する compare no more than N characters in lines |
| --help | ヘルプを表示する display this help and exit |
| --version | バージョン情報を表示する output version information and exit |
です。
それでは、使い方を見ていきましょう。
前提として、以下の内容のテキストファイル「hoge.txt」があるとします。
piyo1
pi2
piyopiyo3
piyopiyo3
piyopiyo3
piyo1
piyo1
piyopiyo3
pi2
Pi2
pi2
オプションを何も指定しないで
uniq hoge.txt
を実行すると、以下の結果になります。
piyo1
pi2
piyopiyo3
piyo1
piyopiyo3
pi2
Pi2
pi2
重複行が1行にまとめて表示されています。
3行目の「piyo3」と4行目の「piyo1」が実際には複数行(3行と2行)あります。
大文字と小文字は区別されるので、小文字はじまりの「piyo2」と大文字はじまりの「Piyo2」は別扱いです。
結果をテキストファイルに出力することも可能です。
例えば
uniq hoge.txt out.txt
を実行すると「uniq hoge.txt」の結果が「out.txt」に出力されます。
「-c」オプションは重複した行数を表示するオプションです。
例えば
uniq -c hoge.txt
を実行すると、以下の結果になります。
1 piyo1
1 pi2
3 piyopiyo3
2 piyo1
1 piyopiyo3
1 pi2
1 Pi2
1 pi2
各行の先頭に表示されているのが重複した行数です。
3行目の「piyo3」が実際には3行、4行目の「piyo1」が実際には2行あることが分かります。
「-d」オプションは重複行のみ表示するオプションです。
重複している行は、それぞれ1行にまとめられます。
例えば
uniq -d hoge.txt
を実行すると、以下の結果になります。
piyopiyo3
piyo1
重複行の「piyopiyo3」と「piyo1」のみ表示されました。
「-D」オプションも重複行のみ表示するオプションです。
ただし重複している行を1行にまとめません。
そのまま表示します。
例えば
uniq -D hoge.txt
を実行すると、以下の結果になります。
piyopiyo3
piyopiyo3
piyopiyo3
piyo1
piyo1
3行重複している「piyopiyo3」が3行、2行重複している「piyo1」が2行、表示されました。
「--group」オプションを指定すると、重複行の区切りごとに空行が入ります。
例えば
uniq --group hoge.txt
を実行すると、以下の結果になります。
piyo1
pi2
piyopiyo3
piyopiyo3
piyopiyo3
piyo1
piyo1
piyopiyo3
pi2
Pi2
pi2
なお「--group」に続けて「separate」「prepend」「append」「both」の4つが指定可能です。
「separate」は未指定時と同じです。
区切り部分に空行が入ります。
「prepend」を指定すると、空行が区切りとなる行の上に付きます。
例えば
uniq --group=prepend hoge.txt
を実行すると、以下の結果になります。
piyo1
pi2
piyopiyo3
piyopiyo3
piyopiyo3
piyo1
piyo1
piyopiyo3
pi2
Pi2
pi2
パッと見で違いが分かりにくいですね。
1行目に空行が入っています。
最終行の下には空行が入っていません。
「prepend」は区切り行の上に空行が付くイメージです。
「append」を指定すると、空行が区切りとなる行の下に付きます。
例えば
uniq --group=append hoge.txt
を実行すると、以下の結果になります。
piyo1
pi2
piyopiyo3
piyopiyo3
piyopiyo3
piyo1
piyo1
piyopiyo3
pi2
Pi2
pi2
やっぱり、パッと見で違いが分かりにくいですね。
最終行の下に空行が入っています。
1行目には空行が入っていません。
「append」は区切り行の下に空行が付くイメージです。
「both」を指定すると、空行が区切りとなる行の上下に付きます。
「prepend」と「append」を両方指定するイメージです。
例えば
uniq --group=both hoge.txt
を実行すると、以下の結果になります。
piyo1
pi2
piyopiyo3
piyopiyo3
piyopiyo3
piyo1
piyo1
piyopiyo3
pi2
Pi2
pi2
やっぱり、パッと見で違いが分かりにくいですね。
1行目に空行が入っています。
最終行の下にも空行が入っています。
「both」は区切り行の上下に空行が付くイメージです。
うん、たいした違いはありませんね。
次に「-i」オプションの説明をします。
「-i」オプションは、大文字・小文字を区別しないオプションです。
例えば
uniq -i hoge.txt
を実行すると、以下の結果になります。
piyo1
pi2
piyopiyo3
piyo1
piyopiyo3
pi2
「-i」オプションを指定しない実行結果は
piyo1
pi2
piyopiyo3
piyo1
piyopiyo3
pi2
Pi2
pi2
でした。
最後の3行に注目してください。
pi2
Pi2
pi2
が
pi2
に、まとめられています。
「-i」オプションを指定したことによって、1文字目の「p」と「P」が同じ文字と判定されるようになったからです。
あとは、一応「-u」オプションも説明しておきましょう。
「-u」オプションは重複行以外を表示するオプションです。
例えば
uniq -u hoge.txt
を実行すると、以下の結果になります。
piyo1
pi2
piyopiyo3
pi2
Pi2
pi2
つまり、オプションを指定しないときと同じ動きをします。
最後に「-w」オプションです。
「-w」オプションは各行の比較する文字数を指定します。
例えば
uniq -w1 hoge.txt
を実行すると、以下の結果になります。
piyo1
Pi2
pi2
これは、各行の先頭1文字が同じだったら重複行と見なす指定だからです。
各行の1文字目は「p」か「P」です。
小文字の「p」で始まる行はすべて同じ行と見なされ、最初に登場した「piyo1」が表示されます。
次に、大文字の「P」が登場したので「Pi2」が表示され、最後に小文字の「p」で始まる「pi2」が表示されて終了です。
ですから、大文字・小文字を区別しない「-i」オプションも指定して
uniq -w1 -i hoge.txt
を実行すると、以下の結果になります。
piyo1
すべての行が重複行と判断されるからです。
uniqコマンドの使い方は、そんなところです。
一言でまとめるよ
まぁ「uniq」ってコマンドが出てきたら「重複行を削除するときに使うんだな~」と お考えください。






