【发布时间】:2020-04-10 14:03:07
【问题描述】:
我正在尝试使用 powershell 脚本将两个 TXT 文件转换为一个 CSV 文件。当文件具有相同的结构和相同的行数时,案例看起来很容易。但在我的情况下,txt 文件具有不同的结构。
两个 txt 文件中的管道符号不是分隔符,应视为普通字符,它是一个字符串。
文件 URL.txt
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
文件 URL1.txt
L5020|http://linktosite.de|URL|P555
L100|http://sitelink.de|URL|P523
L50|http://abcde.de|URL|P53
L511|http://bbcccddeee.de|URL|P540
我期望的 CSV 应该如下所示,分隔符是“;”
HEADER1;HEADER2
L5020|http://linktosite.de|URL;L5020|http://linktosite.de|URL|P555
L100|http://sitelink.de|URL;L100|http://sitelink.de|URL|P523
L50|http://abcde.de|URL;L50|http://abcde.de|URL|P53
L511|http://bbcccddeee.de|URL;L511|http://bbcccddeee.de|URL|P540
L300|http://link123456.de|URL;
L5450|http://randomlink.de|URL_DE;
L5460|http://randomwebsitelink.de|URL_DE;
我尝试过类似的方法
$URL = "C:\Users\XXX\Desktop\URL.txt"
$URLcontent = Get-Content $URL
$URL1 = "C:\Users\XXX\Desktop\URL1.txt"
$URLcontent1 = Get-Content $URL1
$results = @() # Empty array to store new created rows in
$csv = Import-CSV "C:\Users\XXX\Desktop\map.csv" -Delimiter ';'
foreach ($row in $csv) {
$properties = [ordered]@{
HEADER1 = $URLcontent
HEADER2 = $URLcontent1
}
# insert the new row as an object into the results-array
$results += New-Object psobject -Property $properties
}
# foreach-loop filled the results-array - export it as a CSV-file
$results | Export-Csv "C:\Users\XXXX\Desktop\map_final.csv" -NoTypeInformation
还有类似的:
import-csv URL.txt -Header 'HEADER1' | Export-CSV "C:\Users\xxx\Desktop\URL.csv" -Delimiter ';' -NoTypeInformation
import-csv URL1.txt -Header 'HEADER2' | Export-CSV "C:\Users\xxx\Desktop\URL1.csv" -Delimiter ';' -NoTypeInformation
Get-ChildItem "C:\Users\xx\Desktop" -Filter "URL*.csv" | Select-Object -ExpandProperty FullName | Import-Csv | Export-Csv .\combinedcsvs.csv -NoTypeInformation -Append
没有任何成功...
BR
【问题讨论】:
-
我不懂组合逻辑。你能再澄清一点吗?在这里也显示预期的输出可能更容易。
-
如果我错了,请纠正我,但是,你的最终产品是一个 csv,它具有从 txt 值中获取的多 1 个属性,如果 1 的大小比另一个大,它应该用空行填充它,它是可行的,但您能否详细说明答案,添加您尝试过的内容以及具有预期输出的文本文件?
-
请说明您希望这两个文件在合并后的外观。
-
使用这个
Join-Object:ConvertFrom-Csv .\File1.txt -Header A | LeftJoin (ConvertFrom-Csv .\File2.txt -Header B,C,D -Delimiter '|')
标签: powershell