Я хотел бы заменить каждую строку из одного файла 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
}
}
}
В каждом файле есть сто строк, но файлы не совпадают. Существует несколько сценариев:
- В файле A больше строк, чем в файле B
- В файле 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