2ファイル間で、カンマ区切りの範囲で一致する行を、除外するには

実現したいこと

大元のファイルのカンマ区切りの先頭が、
比較対象のファイル内の行と一致する行を、除外したいです。

▼データのイメージ

大元のファイル: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)21036475869

補足情報(FW/ツールのバージョンなど)

  • bash 4.1.2
  • perl 5.10.1

コメントを投稿

0 コメント