У меня есть CSV-файл с несколькими столбцами. У меня есть определенное имя столбца с именем «Exported_Id», и оно выглядит примерно так
f36b9decc73e40bfb9a6250198a83fc0/SharePoint/source_28D4CE4DFC53AABB34B41E17BE9DEBBC/item__6761c90b-c1e0-4a91-b72c-e044e5b8cc56_1.0
Мне просто интересно, как я могу разделить только это (разделение до и после _)
6761c90b-c1e0-4a91-b72c-e044e5b8cc56
а затем добавьте его в новый столбец с именем «Modified_Id» и экспортируйте его с существующими столбцами в новый файл csv.
Я немного застрял, поэтому любая помощь или предложение будут очень признательны.
$CSVImport = Import-CSV $Global:Advance_CSV
foreach($CSVLine in $CSVImport){
$CSVExportedID = $CSVLine.Exported_Id
$Modified_Id= $CSVExportedID -split "__"
Select-Object $Modified_Id, "Modified_Id" | Export-Csv $ModifiedFile
}
@Olaf Это работает, и большое спасибо. Можете ли вы также помочь мне в том, как создать новый столбец и экспортировать его в новый CSV-файл с существующими столбцами?
Вы можете использовать это хорошее регулярное выражение , адаптированное из этого ответа , чтобы захватить Guid в этом столбце и создать новый столбец, используя вычисляемое свойство с Select-Object:
$re = [regex] '(?i)[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}'
Import-CSV path\to\myCsv.csv | Select-Object *, @{
Name = 'Modified_Id'
Expression = { $re.Match($_.Exported_Id).Value }
} | Export-Csv path\to\theNewCsv.csv -NoTypeInformation
Вы можете использовать вычисляемое свойство для расширения существующего набора данных.
$Result=
foreach($CSVLine in $CSVImport){
$CSVLine |
Select-Object -Property *,
@{
Name = 'Modified_Id';
Expression = {($_.Exported_Id -split "_")[-2]}
}
}
$Result |
Format-Table -AutoSize
Предположим, что структура содержимого ячейки непротиворечива, вы можете разделить содержимое ячейки с помощью
($CSVExportedID -split "_")[-2]
на подчеркивании и выбрать предпоследний элемент результирующего массива.