dポイントプレゼントキャンペーン実施中!

Windowsのコマンドラインで、テキストファイル内の重複行の削除を行いたいのですが、行全体ではなく、行の一部のみを比較して重複行を削除出来ないかと考えています。

例えば、以下の様な内容のファイルがあり、
行頭の3文字のみを比較対照とした場合、
--------------------------
aaa1
aaa2
bbb1
bbb2
bbb3
--------------------------

以下の様な結果にしたいのです。
--------------------------
aaa1
bbb1
--------------------------

AWKやPerl、その他のコマンドでも構いませんので、どなたかご存知の方がおられましたらお教え頂けないでしょうか。

A 回答 (3件)

こんな感じですか?



sort in.txt |gawk "{nstr=substr($0,1,3);if(ostr!=nstr){print $0};ostr=nstr}"

sortで元の文字列群を整列させる
substrで1文字目から3文字目を抽出
先頭3文字が前の行と異なったら出力する
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます。

お教え頂いたコマンドを実行してみましたところ、バッチリ目的の処理をしてくれました。実際のデータでも思い通りの結果を出力してくれました。大変助かりました。本当にありがとうございました。

ご回答、本当にありがとうございました。

お礼日時:2014/04/30 20:30

そこまでの仕様ができているなら, Perl で


先頭 3文字をキーにしたハッシュを作る
だけですよね.
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

先頭3文字をキーにしたハッシュを作ればいいのですね。
自分はPealの知識がないのですが、今から調べてやってみようと思います。

ご回答、ありがとうございました。

お礼日時:2014/04/30 18:34

仕様の確認ですが



→残すのは先に出てきたもの?
→1行前との比較だけでいい?
※たとえば
aaa1
bbb1
aaa2
ならaaa2は残る
→1行前以外を比較したい場合ソートしてよい?
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

「残すのは先に出てきたものか」については、どれが残っても構いません。

「1行前との比較だけでいいか」については、1行前との比較だけではなく、全ての行と比較したいです。

「1行前以外を比較したい場合ソートしてよいか」については、ソートしても構いません。

もし実現可能なようでしたら、宜しくお願い致します。

お礼日時:2014/04/30 17:15

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