プロが教える店舗&オフィスのセキュリティ対策術

表題の件にて、質問です。

bashでshを作成しています。いろいろ試しているのですが、
UNIXのコマンドで、uniqコマンドがありますが、それと同じことをsed又は、awk等を使用して、作成することは可能でしょうか?
作成が可能であれば、記述方法を教えてくださいませ。

※ループ文を使用しないで、出来るだけ完結なコマンド文にしたい。

例:
file.txt 以下中身
----------------------
AAAA
BBBB
BBBB
CCCC
CCCC
-----------------------

AAAA
BBBB
CCCC
の3文字のみを出力したい。

ご存知の方いらっしゃいましたら、ご教示ください。

A 回答 (5件)

複数ファイルには対応してないけどこんなのとか。



awk 'NR==1||prev!=$0;{prev=$0}' sample.txt

よっぽどひねたawkでなければこれでいけると思います。
まあスクリプトをファイルに収めれば問題ありませんが。

にしても、bashがあるのにuniqがないってのはなんという環境なんでしょうか。
    • good
    • 0

sed や awk はあるけど uniq のない環境って想定できないなぁ.... どんな「UNIX」なんでしょうか?


原典には当たってないけど, uniq は POSIX で規定されたコマンドなので「UNIX」を名乗るなら uniq はあるはず.
    • good
    • 0

ああ, sed は探したらあった.


保守性悪そ.

参考URL:http://www.geocities.jp/fut_nis/html/sed-ja/uniq …
    • good
    • 0

お察しのとおり、awkで簡単に片付きますけど


#ぶっちゃけbashのみでできると思う。

・なぜuniq をつかったらダメなのか
#uniqが使えなくてsed/awkが使えるという前提が良くわからない
・ループ文を使わずに簡潔にと言う制限事項はなんのためにあるのか

あたりを明確にしていただかないとスクリプトを書くわけにはいきませんね。
まあ誰かが書きそうだけど。

この回答への補足

ありがとうございます。
以下 補足いたします。

・なぜuniq をつかったらダメなのか
uniqのコマンドが存在しないからです。

・ループ文を使わずに簡潔にと言う制限事項はなんのためにあるのか
多重ループになるのは、見た目あまりよろしくないと思いました。
制約はありません。

一行でまとめられるなら、きれいにまとめたい為です。

補足日時:2009/02/03 09:44
    • good
    • 0

awk は使ってないから知らんけどできるはず.


sed でも N とか s/\(.*\)\n\1/\1/ とか t とかを駆使してループを書けば可能.
とはいうけど, 正直 uniq 使えばいいじゃん.
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!