使用powershell修复CSV

of1yzvn4  于 2023-10-18  发布在  Shell
关注(0)|答案(1)|浏览(149)

我有一个CSV,我试图导入,当我尝试导入,许多条目无法导入,因为其中一个字段不是有效的http(s) URL。下面是一个例子

username,username2,username3,title,password,note,url,category,otpSecret
[email protected],,,website1,somepass,,website1.com,,
[email protected],,,website2,somepass,,https://website2/Login,,
[email protected],,,website3.com,somepass,,website3.com,,

如你所见,第1,3行失败,第2行通过。我需要“修补”第1、3行,但我仍然需要所有行。我宁愿不修改的地方,但我不反对它。
最后,我的数据需要看起来像这样:

username,username2,username3,title,password,note,url,category,otpSecret
[email protected],,,website1,somepass,,https://website1.com,,
[email protected],,,website2,somepass,,https://website2/Login,,
[email protected],,,website3.com,somepass,,https://website3.com,,

我已经尝试过将它们按好的和坏的进行分组,这样我所需要做的就是重新Map“坏的”,然后保存文件,但是我的“坏的”并不是那么好。

$stuff =Import-Csv -Path ./credentials.csv | Group-Object {$_.url -like 'https*'}
$stuff
Count Name                      Group
----- ----                      -----
  121 False                     {@{username=...},}
  284 True                      {@{username=...},}

我认为代码看起来像这样(伪代码)

($stuff | Where-Object {$_.Name -eq 'False' } | %{... mapping here.. } | Select -First 1).Group + 
($stuff | Where-Object {$_.Name -eq 'True' } | Select -First 1).Group
ltskdhd1

ltskdhd11#

根据所提供的信息,以下内容应该会有所帮助,但很难说解决方案是否对所有数据都足够强大。
本质上,它使用IsWellFormedUriString method检查.url值是否是绝对值Uri,如果不是,它将更新https://的属性。

Import-Csv path\to\csv.csv | ForEach-Object {
    if (-not [uri]::IsWellFormedUriString($_.url, [UriKind]::Absolute)) {
        $_.url = 'https://' + $_.url
    }

    $_
} | # ... do more stuff in this pipeline

这段代码使用所讨论的数据的输出将是:

username      username2 username3 title        password note url                    category otpSecret
--------      --------- --------- -----        -------- ---- ---                    -------- ---------
[email protected]                     website1     somepass      https://website1.com
[email protected]                     website2     somepass      https://website2/Login
[email protected]                     website3.com somepass      https://website3.com

相关问题