這個問題在這里已經有了答案: 在 PowerShell 中,將兩個表合并為一個的最佳方法是什么? (5 個回答) 13 天前關閉。
我有兩個 CSV 檔案:
CSV_1:
Name,Age,
John,20
Amy,25
Joe,30
CSV_2:
Name,Address
JohnDoe,123 street
AmyDoe,456 street
JoeSmith,789 drive
有沒有辦法在 Powershell 中使用 SQL LIKE 語法將它們連接在一起?
例如:
select *, csv2.address from csv1
left join csv2 on csv2.Name LIKE (csv1.Name '%%')
我嘗試使用 JOIN-OBJECT 模塊,但看起來沒有辦法使用這種過濾。或者也許我找不到一個例子來做到這一點。由于一些限制,它必須在 Powershell 中完成。對此的任何幫助表示贊賞。
謝謝
uj5u.com熱心網友回復:
$a = ConvertFrom-Csv @'
Name,Age,
John,20
Amy,25
Joe,30
'@
$b = ConvertFrom-Csv @'
Name,Address
JohnDoe,123 street
AmyDoe,456 street
JoeSmith,789 drive
'@
使用這個Join-Object script/ Join-Object Module(另請參閱:在 Powershell 中,將兩個表合并為一個的最佳方法是什么?),您可能會執行以下操作:
$a |Join $b -Using { $Right.Name -Like "$($Left.Name)*" }
Name Age Address
---- --- -------
{John, JohnDoe} 20 123 street
{Amy, AmyDoe} 25 456 street
{Joe, JoeSmith} 30 789 drive
要分隔名稱:
$a |Join $b -Using { $Right.Name -Like "$($Left.Name)*" } -Name A,B
AName BName Age Address
----- ----- --- -------
John JohnDoe 20 123 street
Amy AmyDoe 25 456 street
Joe JoeSmith 30 789 drive
請注意,除了存在例如 aJon將與 a 匹配的風險之外JonathanDoe,該-Using引數相當慢。
如果全名實際上在camelCaseorPascalCase中,那么首先去掉姓氏會更快(這可能對雙方都進行):
'JohnDoe' -CReplace '(?<=. )[A-Z] .*'
John
$a |Join $b -On { $_.Name -CReplace '(?<=. )[A-Z] .*' } -Name A,B
AName BName Age Address
----- ----- --- -------
John JohnDoe 20 123 street
Amy AmyDoe 25 456 street
Joe JoeSmith 30 789 drive
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/510821.html
標籤:sql电源外壳加入
上一篇:在R中匹配兩列中的一行
