Index > 重複行を削除するjythonコード uniq.py
Mon, October 6, 2008

重複行を削除するjythonコード uniq.py

Linuxには、uniq というコマンドがあり、これは重複した行を削除します。

$ cat sample.txt | sort | uniq 

のように使うことで、 テキストファイル中の重複のある行を削除することができます。

しかし、わたしが使っているLinux(Vine)では、どうも uniq がユニコードに 対応していないようで、UTF-8 の文字コードのファイルを uniq を 使って処理しても、うまく重複した行を削除してくれません。

そこで、今回 jython で取り急ぎ uniq コマンドの代わりになる uniq.py というコードを作成しましたので、メモしておきます。 (ただし、これは UTF-8 だけに対応しています。)

uniq.py

import java.io as io
import java.lang as lang
import java.util as util

ENC="UTF-8"

false=0
true=1



def toList():
    list=util.ArrayList()

    br=io.BufferedReader( io.InputStreamReader( lang.System.in,ENC ) )
    while(true):
        line=br.readLine()
        if line==None:
            break
        list.add( line )

    br.close()
    return list



pw=io.PrintWriter( io.OutputStreamWriter( lang.System.out,ENC ) )

prev_line=None
for line in toList():
    if line!=prev_line:
        pw.println( line )
    prev_line=line

pw.close()

使い方

$ cat sample.txt | sort | jython uniq.py 

sample.txt

123
hogehoge
123
hoge
foo
foobar

結果

123
foo
foobar
hoge
hogehoge
 Twitter
follow me on Twitter
 Categories