実現したいこと
大元のファイルのカンマ区切りの先頭が、
比較対象のファイル内の行と一致する行を、除外したいです。
▼データのイメージ
大元のファイル:src.txt
10,0 9,0 8,0 7,0 6,0 5,0 4,0 3,0 2,0 1,0
比較対象のファイル:dst.txt
1 2 3 4 5
▼期待される出力結果
src.txt
のうち、「5,0
」~「1,0
」の5行が
除外されたテキストが、出力される。
最終的な出力結果は、ソートされていなくてもOKなものとする。
10,0 6,0 7,0 8,0 9,0
前提
src.txt
側が数百万行単位の大規模データとなっても、
実行時間を短縮できるように、なるべくパフォーマンスを重視したいです。
PythonやPHP等のスクリプト言語で、
配列ループ・配列の要素判定をする方式であれば、
比較的容易に実現可能ではありますが、実行速度に難がある状態です。
また、古いシステムでも利用できるように、
可能な限りbashやperl辺りで完結させたいと考えております。
試したこと
commコマンド、cutコマンドを組み合わせるやり方では、
src.txt
側に元々入っている付属情報が抜け落ちてしまっています。
(最終的には、,0
の部分まで、該当の行全体が出力されるようにしたい)
bash
1$ comm -23 <(sort src.txt | cut -f 1 -d ',') <(sort dst.txt) 210 36 47 58 69
補足情報(FW/ツールのバージョンなど)
- CentOS 6.6
- bash 4.1.2
- perl 5.10.1
- Python 2.6.6
回答2件
あなたの回答
tips
プレビュー