トランザクションのログによって生成された、行で区切られた口座番号のリストがあります。
このリストを、各アカウントが多数 (アカウントごとに複数のトランザクションがログに記録されている場合) ではなく、1 回だけ出現するファイルに統合するにはどうすればよいですか?
Python が推奨されますが、C も使用できます。
with open(filename) as fin, open(newfilename, 'w') as fout:
fout.writelines(set(fin))
サンプル ログ ファイルとオペレーティング システムを含めていただければ助かりました。
UNIX 環境であれば、awk と sort を使用すると非常に簡単です。
ログ ファイル (log.txt など) の各行の 3 番目の単語にアカウント情報が含まれている場合 (以下のログ ファイルのサンプルを参照):
LOG WARNING 12345 cancelled ....
LOG WARNING 67482 subscribed ....
以下の例を参照してください。ドル記号はコマンド プロンプトです。
$ awk '{print $3}' log.txt | sort -u
Windows 環境の場合は、Windows 用の cygwin ( http://www.cygwin.com/ ) をダウンロードしてインストールし、コマンド プロンプトから上記のコマンドを実行します。
順序が重要な場合は、次を使用できますcollections.OrderedDict
。
from collections import OrderedDict
with open('input') as fin, open('output', 'w') as fout:
uniques = OrderedDict.fromkeys(fin)
fout.writelines(uniques)