none
findstr の/Cオプションと/Gオプションの併用について RRS feed

  • 質問

  • DOSコマンドのFINDSTRコマンドについての質問です。

    2GBあるCSVファイル(AAA.CSV)の必要な行だけ取り出すのにDOSコマンドのFINDSTRコマンドを使いたいと思っています。

    スペースを含む複数のキーワードを含む行をOR条件で取り出したいです。

    このキーワードが2000行あるため別ファイル(BBB.TXT)にして/Gオプションを使ってみたのですが、

    スペースを含むキーワードだとその行のキーワードが複数の条件と判断され、余分な行まで取り出されてしまいます。

    以下のようにほしい結果だけをとるオプションの組み合わせかたはありませんでしょうか?

    例 FINDSTR /G:BBB.TXT  AAA.CSV

    AAA.CSV:

    2019/8/1,aaaa bbb,ddd,eee

    2019/8/1,aaaa,ddd,eee

    2019/8/1,bbb,ddd,eee

    2019/8/1,bbb,ddd,aaaa bbb

    BBB.TXT

    aaaa bbb

    ほしい結果(「aaaa bbb」が含まれる行だけ取得

    2019/8/1,aaaa bbb,ddd,eee

         ~~~~~

    2019/8/1,bbb,ddd,aaaa bbb

             ~~~~~~

    実際の結果(aaaa bbbスペースで別条件と判断されるため全行取得)

    2019/8/1,aaaa bbb,ddd,eee

    2019/8/1,aaaa,ddd,eee

    2019/8/1,bbb,ddd,eee

    2019/8/1,bbb,ddd,aaaa bbb

    2020年2月10日 7:43

回答

  • こちらWindows 10 Ver 1909(Version 10.0.18363.628)ですが、提示されたaaa.csvとbbb.txtをつくって
    >findstr /g:bbb.txt aaa.csv
    2019/8/1,aaaa bbb,ddd,eee
    2019/8/1,bbb,ddd,aaaa bbb
    という結果が得られています。

    バージョンによるのかもなので、スペースの前に\をおいてみるとか、
    近似解としてスペースの代わりにドット(任意の一文字)を使うとかはどうでしょう。


    jzkey

    • 回答としてマーク siba-inu 2020年2月21日 5:53
    2020年2月10日 10:19
  • oooohです

    for文でデリミタ指定するとか?

    for /f "tokens=1,2,3,4 delims=," %i in ('findstr /G:c:BBB.csv c:\AAA.csv')  do echo %i,%j,%k,%l

    • 回答としてマーク siba-inu 2020年2月21日 5:53
    2020年2月13日 6:06

すべての返信

  • こちらWindows 10 Ver 1909(Version 10.0.18363.628)ですが、提示されたaaa.csvとbbb.txtをつくって
    >findstr /g:bbb.txt aaa.csv
    2019/8/1,aaaa bbb,ddd,eee
    2019/8/1,bbb,ddd,aaaa bbb
    という結果が得られています。

    バージョンによるのかもなので、スペースの前に\をおいてみるとか、
    近似解としてスペースの代わりにドット(任意の一文字)を使うとかはどうでしょう。


    jzkey

    • 回答としてマーク siba-inu 2020年2月21日 5:53
    2020年2月10日 10:19
  • oooohです

    for文でデリミタ指定するとか?

    for /f "tokens=1,2,3,4 delims=," %i in ('findstr /G:c:BBB.csv c:\AAA.csv')  do echo %i,%j,%k,%l

    • 回答としてマーク siba-inu 2020年2月21日 5:53
    2020年2月13日 6:06
  • ご回答ありがとうございます。

    >近似解としてスペースの代わりにドット(任意の一文字)を使うとかはどうでしょう。

    こちらで対応しました。

    2020年2月21日 5:55
  • ご回答ありがとうございます。

    頂いた回答でも実現できましたが、Gオプションで読み込むCSVの行数が2000行あるため

    2000回ループとなってしまうためjzkeyさんご提案の方法をとらせていただきました。

    2020年2月21日 5:58