質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

Q&A

2回答

1216閲覧

ファイルに規定されたパターンに一致するcsv行を高速に削除したい

ass777

総合スコア0

bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

0グッド

0クリップ

投稿2021/05/31 22:36

編集2021/05/31 23:57

前提・実現したいこと

2つのcsvファイルを比較して、キー(前方複数項目の組み合わせ)の追加削除の差分なのか、キー以外の変更なのか、判定したい

キー部分のみ抽出したファイルのdiff結果(10万行程)をとり、
追加削除の差分行を、比較するcsvファイルから行削除★し、キー追加削除の差分が生じないファイルをつくり、それらのdiffとり、最後にキー部分のみのdiff結果をマージすることで実現しようと考えました

★の部分は、追加差分と削除差分で行削除するcsvファイルを入れ換えてます。★での下記処理が遅く20分程かかってしまいます。高速化する手立てがあれば教えてください

該当のソースコード

bash

1cat del_key.csv | xargs IXXX sed -ie "/^XXX/d" hikakumoto.csv 2

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takasima20

2021/05/31 23:19

なんとなくですが、別ファイルに出力すると少しは早くなるかも?
ass777

2021/06/01 00:36

コメントありがとうございます オプションiを削り、別ファイルに出力したのですが、重複行がたくさん出力されていました。 なお、処理時間はあまりかわらなかったです
guest

回答2

0

# sed 's/^/^/' del_key.csv > del_key.csv2 # grep -v -f del_key.csv2 hikakumoto.csv

とか

投稿2021/06/01 00:05

sigsegv

総合スコア895

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ass777

2021/06/01 01:28

コメントありがとうございます。 数行のファイルで試したところ正常にできたのですが、5000行のファイルを2つ作り、検索対象に1行だけ正規表現にマッチしない行を入れたところ、何もヒットせずでした。 処理時間的には早い気がしますが、レコード数増やすと上手くいかない理由がわかりません。。
sigsegv

2021/06/01 06:23

del_key.csvに空行が含まれていないでしょうか? 質問に書かれたxargsは空行は無視されるみたいですが、上の処理では全部の行にマッチするデータになってしまいます。
guest

0

PythonやScalaでそれぞれのCSVからキーのセットを作って差集合をとれば追加と削除がとれます。
キー以外の部分は積集合でとれるかと。
試してないですがScalaなら実行時間10秒くらいな気がします。

投稿2021/05/31 22:48

rysh

総合スコア874

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ass777

2021/06/01 00:38

コメントありがとうございます。 可能な限り、bashのみで実現したいのですが、無理そうなら検討してみます。 ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問