0

PowerShell スクリプトのこの 1 つのセクションで、現在立ち往生しています。基本的に、選択文字列を介して比較したい2つのファイルがあります...詳細

FileA.txt の各項目について、FileB.txt に対して選択文字列を実行して、存在するかどうかを確認したいと考えています。FileA.txt の項目が FileB.txt に存在しない場合は、FileA.txt の項目を画面に出力します。

これは、テキストファイルがどのように見えるかです..多かれ少なかれ

FileA.txt

1
2
3
4
6

FileB.txt

6
7
8
9
10

望ましい出力は次のようになります。

1
2
3
4

これは、私の PS コードが現在どのように見えるかです。私の思考プロセスは、選択文字列内で変数を使用できるということでしたが、うまくいきません:(

$IPs = Get-Content "C:\\FileA.txt" 

Get-Content C:\FileB.txt | Select-String -InputObject $IPs

誰かが私を助けて、私が間違っていることを指摘してください。

4

2 に答える 2

2

この特定の例では、おそらく Compare-Object の方が適しています。2 つのリストの違いを見つけるように設計されています。

次のようなものを使用します。

Compare-Object -ReferenceObject $(gc .\FileA.txt) -DifferenceObject $(gc .\FileB.txt) | where { $_.SideIndicator -eq '<=' } | select -expand InputObject

ただし、select-string を使用してこれを行うこともできます。

gc .\FileA.txt | select-string -Pattern $(gc .\FileB.txt) -NotMatch

これは、FileB の行と一致しない FileA の行を見つけるだけですが、FileB の行は正規表現として解釈されます。ワイルドカードです。

于 2015-09-18T17:28:08.423 に答える
2

限られたサンプル データに基づいて、これを行う方法の例を次に示します。

"1 2 3 4 6" > "fileA.txt"
"6 7 8 9 10" > "fileB.txt"

$arrayA = (Get-Content "fileA.txt").Split(" ")
$arrayB = (Get-Content "fileB.txt").Split(" ")

$arrayResult = @()

foreach($valueA in $arrayA) {
    if($arrayB -notcontains $valueA) {
        $arrayResult += $valueA
    }
}

$arrayResult -join " "

今、入力ファイルは最終的にはまったく異なるものになると思います

編集 :

改行の使用:

"1
2
3
4
6" > "fileA.txt"

"6
7
8
9
10" > "fileB.txt"

$arrayA = Get-Content "fileA.txt"
$arrayB = Get-Content "fileB.txt"

$arrayResult = @()

foreach($valueA in $arrayA) {
    if($arrayB -notcontains $valueA) {
        $arrayResult += $valueA
    }
}

$arrayResult -join "`n"

注意: 2 つのスクリプトは、必要なファイルを埋めることから始まります。それを行う必要はないと思います。

于 2015-09-18T16:28:11.280 に答える