FC2ブログ

サラリーマンのすらすらIT日記

IT関連を中心とした日々を綴ります。
2012/03/01

sed-uniqコマンドを実現する

あるテキストファイルで、同じ内容の行が続いた場合、1行にして出力することになりました。例を挙げると、

abc
abcc
abcc
abcd


であれば、

abc
abcc
abcd


を出力するということです。UNIX系OSにあるuniqコマンドと同じです。得意なawkでやる手もあるのですが、一度sedで考えてみようと思いました。

おそらくホールド・スペースを使うのだろうと思いました。パターン・スペースをホールド・スペースにコピーしてから次の行を読む。そしてパターン・スペースとホールド・スペースを比較する。同じであれば2つの行が同じということで...という理屈を考えましたが、そもそもパターン・スペースとホールド・スペースを比較するというコマンドがありません。ということはsedでは実現できないのか?

Webで調べるとありました。できるんですね。なんと、/^\(.*\)\n\1$/という正規表現を使ってマッチすれば、2つの連続する行が同じというわけですか。うーん、カッコで括って\1でそれを拾ってくるのは知っていましたが、sコマンドでs/\(.*\)/\1/のようにして使うものだとばかり思っていました。

自身の備忘録のために、この「sed版uniq」を上記のテキストファイルを例に解説しておきます。



これはすごい!

スポンサーサイト



コメント

コメントの投稿

  • URL
  • コメント
  • パスワード
  • 秘密
  • 管理者にだけ表示を許可する

トラックバック

トラックバックURL:http://sookibizviz.blog81.fc2.com/tb.php/1121-3bb2d305

■  カレンダー

07 | 2020/08 | 09
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 - - - - -

■  プロフィール

sookibizviz

Author:sookibizviz
仕事の内容やソフトの紹介を交えながら、日々の悪戦苦闘を綴っていきます。

■  最新記事

■  最新コメント

■  最新トラックバック

■  月別アーカイブ

■  カテゴリ

未分類 (64)
BizViz (24)
IT (1119)
計量 (76)
環境 (26)
数学 (181)
ニュース (46)
本 (187)
音楽 (113)
囲碁 (5)
将棋 (26)
ブログ (14)
日記 (19)

■  FC2カウンター

■  検索フォーム

■  RSSリンクの表示

■  QRコード

QRコード