Найти строку в файле и заменить ее значением из другого файла для нескольких строк - powershell - PullRequest
0 голосов
/ 14 апреля 2020

Я хотел бы заменить каждую строку из одного файла A значением из другого файла B, если строка существует, если нет, затем добавить в конец строки информацию «Ссылка не существует». В файлах есть небольшая разница. Файл A не имеет номера в конце каждой строки, который должен быть добавлен из файла B.

Строка из файла A заменяется строкой из файла B *

L5020|http://linktosite.de|URL to L5020|http://linktosite.de|URL|P555

Я пытался сделать это с картой CSV, но безуспешно, поскольку файл A меняется каждый день, и если позиция изменения строки или новая строка добавляется в файл A, то карта не работает.

$file = "C:\Users\XXX\Desktop\URL\MAP.csv"
$mapping = Import-CSV $file -Encoding UTF8 -Delimiter ";"
$original_file = "C:\Users\XXX\Desktop\URL\fileA.txt"
$destination_file = "C:\Users\XXX\Desktop\URL\Output.txt"
$content = Get-Content $original_file  


for($i=0; $i -lt $content.length; $i++) {
    foreach($map in $mapping) {
     #If([string]::IsNullOrEmpty($content[$i])) {
       If ($InputString -like ($content[$i])) {
            $content[$i] = "$($map.HEADER1)|NOTEXIST" 
        }
        ElseIf ($content[$i] -eq "$($map.HEADER1)") {
                  $content[$i] = $map.HEADER2
        }
    }
}

В каждом файле есть сто строк, но файлы не совпадают. Существует несколько сценариев:

  1. В файле A больше строк, чем в файле B
  2. В файле B больше строк, чем Файл A

Файл A

L5020|http://linktosite.de|URL
L100|http://sitelink.de|URL
L50|http://abcde.de|URL
L511|http://bbcccddeee.de|URL
L300|http://link123456.de|URL
L5450|http://randomlink.de|URL_DE
L5460|http://randomwebsitelink.de|URL_DE

Файл B

L5020|http://linktosite.de|URL|P555
L511|http://bbcccddeee.de|URL|P540
L100|http://sitelink.de|URL|P523
L50|http://abcde.de|URL|P53

Результаты для сценария 1:

L5020|http://linktosite.de|URL|P555
L100|http://sitelink.de|URL|P523
L50|http://abcde.de|URL|P53
L511|http://bbcccddeee.de|URL|P540
L300|http://link123456.de|URL|LINK NOT EXIST 
L5450|http://randomlink.de|URL_DE|LINK NOT EXIST 
L5460|http://randomwebsitelink.de|URL_DE|LINK NOT EXIST 

1 Ответ

0 голосов
/ 14 апреля 2020
$fileA = Get-Content -Path fileA.txt
$fileB = Get-Content -Path fileB.txt

$result = @()
foreach ($lineA in $fileA) {
    $linkExistsInFileB = $false
    foreach ($lineB in $fileB) {
        if ($lineB -ilike "$lineA*") {
            $linkExistsInFileB = $true
            $result += $lineB
            break
        }
    }
    if (-not $linkExistsInFileB) {
        $result += "$lineA|LINK NOT EXIST"
    }
}
$result

Выход:

L5020|http://linktosite.de|URL|P555
L100|http://sitelink.de|URL|P523
L50|http://abcde.de|URL|P53
L511|http://bbcccddeee.de|URL|P540
L300|http://link123456.de|URL|LINK NOT EXIST
L5450|http://randomlink.de|URL_DE|LINK NOT EXIST
L5460|http://randomwebsitelink.de|URL_DE|LINK NOT EXIST
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...