2016-09-23 19 views
0

私の現在の問題は次のとおりです。私は1800の顧客番号(123456789)のリストを持っています。私は、これらの数字のどれが別の、もっと大きな(4 GB)ファイルに現れるかを判断する必要があります。大きなファイルは、すべての顧客情報の固定幅ファイルです。私はSQLでこれをどうやって行うのか知っていますが、フラットファイルだと言いました。Powershell/Batch Files:ファイルに文字列のリストから少なくとも1つのエントリが含まれていることを確認してください。

個々の数字を検索する場合、私は非常によく働いていたこのサイト上の他の場所にあるコマンドを使用していました:

get-content CUSTOMERINFO.txt -ReadCount 1000 | foreach { $_ -match "123456789" } 

しかし、私は別のコマンドにこれを変換するための専門知識、またはAを持っていませんバッチファイル。これは、list.txtをロードし、必要な文字列のためにcustomerinfo.txt内のすべての行を検索します。

時間は大きな制約ではありません。これは、テストサーバー上で実行されているため、一時的なプロジェクトになります。

ご協力いただきありがとうございます。

+0

バッチファイルの場合、 'findstr'を使用して入力をループすることができます。 'for/f' tokens = * "%% a in(%infile%)do(findstr %% <%targetfile%)" – jenesaisquoi

+0

あなたはどんな結果を探していますか? IDのうちの1つが存在するか、または一致するすべてのファイルのすべてのIDについて知ることができますか?複数の試合を気にしますか?あなたはこれを修正するために_anything_を試しましたか?あなたはPowerShellには適していないが、これはコードの書き込み要求のようだ。 – Matt

答えて

0

matchコンパレータは複数の値を処理できますが、バーで区切ることができます。キャラクター。

get-content CUSTOMERINFO.txt -ReadCount 1000 | foreach { $_ -match "DEF|YZ" }

ファイルの内容を読み、改行を任意の文字で置き換えることもできます。 list.txtには、このような

DEF XY

として、検索する値のリストであればその後、あなたはそれを読んで、結合演算子を使用してバーで区切られたリストに変換することができます:

(Get-Content list.txt) -join "|"

は、それらを一緒に入れて、あなたはあなたのソリューションを持っている必要があります。

$listSearch = (Get-Content list.txt) -join "|"; 
get-content CUSTOMERINFO.txt -ReadCount 1000 | foreach { $_ -match $listSearch} 
+0

ありがとう!これはまさに私が必要としていたものです。私はOut-Fileを使って出力をファイルに送り、結果ファイルの合計行をチェックしただけです。 –

+0

これはどのように機能しますか? 'Get-Content xyz | foreach {$ _ - match 'pattern'} 'は' True True False False False'のように出力しますが、ファイルからの行ではなく、正規表現とマッチしたとしても出力されません。行をフィルタリングするには 'where'が必要です。 – TessellatingHeckler

+0

あなたはそうです。私は大きなファイルを生成して終了し、私はそれが私の結果だと信じていました。私は自分自身でコードを書くことになった。 –

1

は、だから私はすべての人の助けに感謝します。誰も私に私の最終的な解決に手伝ってくれる有用な情報をくれたので、感謝します。特に、これがコード作成の要求であるかどうかを尋ねた人には、私はいくつかのコードを書かせる必要があることがわかったので。ここでは、同じ問題に遭遇し、誰のために

は、私が使用して終了コードは次のとおりです。

$matches = Get-Content .\list.txt 
foreach ($entry in $matches) 
{ $results = get-content FiletoSearch -ReadCount 1000 | foreach { $_ -match $entry } 
    if ($results -eq $null) { 
    $entry } 
    else { 
    "found"} 
    } 

これが発見されたすべてのための「が見つかり」エントリを提供します(私はない情報であります必要な場合)、それが見つからないときに検索された値(必要な情報)を返します。

関連する問題