- 締切済み
uniqとループを使用しないで、文字列のフィルターの方法
表題の件にて、質問です。 bashでshを作成しています。いろいろ試しているのですが、 UNIXのコマンドで、uniqコマンドがありますが、それと同じことをsed又は、awk等を使用して、作成することは可能でしょうか? 作成が可能であれば、記述方法を教えてくださいませ。 ※ループ文を使用しないで、出来るだけ完結なコマンド文にしたい。 例: file.txt 以下中身 ---------------------- AAAA BBBB BBBB CCCC CCCC ----------------------- ↓ AAAA BBBB CCCC の3文字のみを出力したい。 ご存知の方いらっしゃいましたら、ご教示ください。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- sakusaker7
- ベストアンサー率62% (800/1280)
複数ファイルには対応してないけどこんなのとか。 awk 'NR==1||prev!=$0;{prev=$0}' sample.txt よっぽどひねたawkでなければこれでいけると思います。 まあスクリプトをファイルに収めれば問題ありませんが。 にしても、bashがあるのにuniqがないってのはなんという環境なんでしょうか。
- Tacosan
- ベストアンサー率23% (3656/15482)
sed や awk はあるけど uniq のない環境って想定できないなぁ.... どんな「UNIX」なんでしょうか? 原典には当たってないけど, uniq は POSIX で規定されたコマンドなので「UNIX」を名乗るなら uniq はあるはず.
- Tacosan
- ベストアンサー率23% (3656/15482)
ああ, sed は探したらあった. 保守性悪そ.
- sakusaker7
- ベストアンサー率62% (800/1280)
お察しのとおり、awkで簡単に片付きますけど #ぶっちゃけbashのみでできると思う。 ・なぜuniq をつかったらダメなのか #uniqが使えなくてsed/awkが使えるという前提が良くわからない ・ループ文を使わずに簡潔にと言う制限事項はなんのためにあるのか あたりを明確にしていただかないとスクリプトを書くわけにはいきませんね。 まあ誰かが書きそうだけど。
- Tacosan
- ベストアンサー率23% (3656/15482)
awk は使ってないから知らんけどできるはず. sed でも N とか s/\(.*\)\n\1/\1/ とか t とかを駆使してループを書けば可能. とはいうけど, 正直 uniq 使えばいいじゃん.
補足
ありがとうございます。 以下 補足いたします。 ・なぜuniq をつかったらダメなのか uniqのコマンドが存在しないからです。 ・ループ文を使わずに簡潔にと言う制限事項はなんのためにあるのか 多重ループになるのは、見た目あまりよろしくないと思いました。 制約はありません。 一行でまとめられるなら、きれいにまとめたい為です。