UNIXコマンドのuniqをスクラッチ実装したものです.
外部ライブラリなどは不使用で,Cの標準ライブラリのみでコンパイルできます.
以下はオプションなどの解説です.
uniq - ファイルの行を読み込み重複する行を削除し、出力する。
uniq [option]... [filePath]
uniqは、指定したファイルまたは標準入力を読み込み、重複行をオプションに従って処理して、標準出力に出力する。 0個以上のオプションを指定でき、ファイルは一つ指定できる。 もし、option 指定なしの場合、重複した行は1度だけ出力し、重複しない行はそのまま出力する。 ただし、入力されるファイルはソート済みであること。
-c 重複した行の数と行の内容を表示する
-i 英文字の大文字小文字を無視して判定する。例)aとAは同じとみなす。
-u 重複した行を出力せず、重複していない行のみを出力する。
-V バージョン情報を出力する。他のオプションとの併用は不可能なのでエラーを出力する。
正常終了時の戻り値は0、エラー時は1以上の値を戻り値とする。
- 上記で示したオプション以外を指定したとき、下記Usageを出力し終了する。
$ uniq -z hoge.dat
Usage: uniq [option] [filePath] \n);
-c 重複した行と重複していない行のそれぞれの数と行の内容を表示する。
-i 英文字の大文字小文字を無視して判定する。例)aとAは同じとみなす。
-u 重複した行を出力せず、重複していない行のみを出力する。
-V バージョン情報を表示。
- オプションの組み合わせが不正なとき下記メッセージを出力し、終了する
$ uniq -V -c hoge.dat
if you use -V, you cannot use it with other options.
(-V または--versionを使用する場合、ほかのオプションと併用できません。)
- 存在しないファイルパスを入力したとき下記メッセージを出力し、終了する。
$ uniq /etc/not_exist.txt ## 存在しないファイルパス
uniq: /etc/not_exist.txt: No such file or directory
hoge.txtを以下の内容とする。
A
A
B
B
b
C
- ファイルパスのみの入力
$ uniq hoge.txt
A
B
b
C
重複する行は一度しか表示されない。
- オプション指定(-c)
$ uniq -c hoge.txt
2 A
2 B
1 b
1 C
重複行の重複した行数と内容を出力する。
- リスト1オプション指定(-i)
$ uniq -i hoge.txt
A
B
C
重複の判定には大文字小文字を無視する。そして、重複行の最初の行を出力する。
- オプション指定(-u)
$ uniq -u hoge.txt
C
重複した行を出力せず、重複しない行のみを出力する。
- オプション指定(-i -c)
$ uniq -i -c hoge.txt
2 A
3 B
1 C
大文字小文字を無視し、重複回数と内容を出力する。
- オプション指定(-i -u)
$ uniq -i -u hoge.txt
C
大文字小文字を無視し、重複しない行のみを出力する。