分割 CSV 文件中的字符串
Divide a string in a CSV file
我在 CSV 文件中有以下数据
"Name","SourceIP","DestinationIP"
"Sep 1 03:55:57 mmt-5","172.16.48.158","22.22.22.22"
"Sep 1 03:55:57 mmt-5","172.16.48.158","22.22.22.22"
"Sep 1 03:55:57 mmt-5","172.16.48.158","22.22.22.22"
"Sep 1 03:55:57 mmt-5","172.16.48.158","22.22.22.22"
我需要将 Name
列拆分为另外 3 列。 Date
、Time
和 Name
。喜欢以下
"Date","Time","Name","SourceIP","DestinationIP"
"Sep 1","03:55:57","mmt-5","172.16.48.158","22.22.22.22"
"Sep 1","03:55:57","mmt-5","172.16.48.158","22.22.22.22"
"Sep 1","03:55:57","mmt-5","172.16.48.158","22.22.22.22"
"Sep 1","03:55:57","mmt-5","172.16.48.158","22.22.22.22"
对如何完成有点迷茫。我试过用逗号替换第 14 个字符,但没有成功。
$test = import-csv C-sample.csv
$test | foreach-object {
$_.Name = $_.Name.Replace(14, ",")
}
$test | export-csv D-sample.csv -notype
有什么帮助吗?
我会使用 regex
解析字符串并创建一个新的 PSCustomObject
将其导出:
$test = import-csv C-sample.csv
$regex = '(?<Date>\w+\s+\d{1,2})\s+(?<Time>\d{2}:\d{2}:\d{2})\s+(?<Name>.*)'
$test | foreach-object {
$regMatch = [regex]::Match($_.Name, $regex)
[PSCustomObject]@{
Date = $regMatch.Groups['Date'].Value
Time = $regMatch.Groups['Time'].Value
Name = $regMatch.Groups['Name'].Value
SourceIP = $_.SourceIP
DestinationIP = $_.DestinationIP
}
} | export-csv D-sample.csv -notype
正则表达式:
(?<Date>\w+\s+\d{1,2})\s+(?<Time>\d{2}:\d{2}:\d{2})\s+(?<Name>.*)
输出:
"Date","Time","Name","SourceIP","DestinationIP"
"Sep 1","03:55:57","mmt-5","172.16.48.158","22.22.22.22"
"Sep 1","03:55:57","mmt-5","172.16.48.158","22.22.22.22"
"Sep 1","03:55:57","mmt-5","172.16.48.158","22.22.22.22"
"Sep 1","03:55:57","mmt-5","172.16.48.158","22.22.22.22"
编辑:
由于您使用的是 PowerShell 2,因此您不能在哈希表上使用 PsCustomObject
转换,因此请改用它:
$test = import-csv C-sample.csv
$regex = '(?<Date>\w+\s+\d{1,2})\s+(?<Time>\d{2}:\d{2}:\d{2})\s+(?<Name>.*)'
$test | foreach-object {
$regMatch = [regex]::Match($_.Name, $regex)
$object = New-Object PSObject
Add-Member -InputObject $object -memberType NoteProperty -Name Date -Value $regMatch.Groups['Date'].Value
Add-Member -InputObject $object -memberType NoteProperty -Name Time -Value $regMatch.Groups['Time'].Value
Add-Member -InputObject $object -memberType NoteProperty -Name Name -Value $regMatch.Groups['Name'].Value
Add-Member -InputObject $object -memberType NoteProperty -Name SourceIP -Value $_.SourceIP
Add-Member -InputObject $object -memberType NoteProperty -Name DestinationIP -Value $_.DestinationIP
$object
} | export-csv D-sample.csv -notype
我在 CSV 文件中有以下数据
"Name","SourceIP","DestinationIP"
"Sep 1 03:55:57 mmt-5","172.16.48.158","22.22.22.22"
"Sep 1 03:55:57 mmt-5","172.16.48.158","22.22.22.22"
"Sep 1 03:55:57 mmt-5","172.16.48.158","22.22.22.22"
"Sep 1 03:55:57 mmt-5","172.16.48.158","22.22.22.22"
我需要将 Name
列拆分为另外 3 列。 Date
、Time
和 Name
。喜欢以下
"Date","Time","Name","SourceIP","DestinationIP"
"Sep 1","03:55:57","mmt-5","172.16.48.158","22.22.22.22"
"Sep 1","03:55:57","mmt-5","172.16.48.158","22.22.22.22"
"Sep 1","03:55:57","mmt-5","172.16.48.158","22.22.22.22"
"Sep 1","03:55:57","mmt-5","172.16.48.158","22.22.22.22"
对如何完成有点迷茫。我试过用逗号替换第 14 个字符,但没有成功。
$test = import-csv C-sample.csv
$test | foreach-object {
$_.Name = $_.Name.Replace(14, ",")
}
$test | export-csv D-sample.csv -notype
有什么帮助吗?
我会使用 regex
解析字符串并创建一个新的 PSCustomObject
将其导出:
$test = import-csv C-sample.csv
$regex = '(?<Date>\w+\s+\d{1,2})\s+(?<Time>\d{2}:\d{2}:\d{2})\s+(?<Name>.*)'
$test | foreach-object {
$regMatch = [regex]::Match($_.Name, $regex)
[PSCustomObject]@{
Date = $regMatch.Groups['Date'].Value
Time = $regMatch.Groups['Time'].Value
Name = $regMatch.Groups['Name'].Value
SourceIP = $_.SourceIP
DestinationIP = $_.DestinationIP
}
} | export-csv D-sample.csv -notype
正则表达式:
(?<Date>\w+\s+\d{1,2})\s+(?<Time>\d{2}:\d{2}:\d{2})\s+(?<Name>.*)
输出:
"Date","Time","Name","SourceIP","DestinationIP"
"Sep 1","03:55:57","mmt-5","172.16.48.158","22.22.22.22"
"Sep 1","03:55:57","mmt-5","172.16.48.158","22.22.22.22"
"Sep 1","03:55:57","mmt-5","172.16.48.158","22.22.22.22"
"Sep 1","03:55:57","mmt-5","172.16.48.158","22.22.22.22"
编辑:
由于您使用的是 PowerShell 2,因此您不能在哈希表上使用 PsCustomObject
转换,因此请改用它:
$test = import-csv C-sample.csv
$regex = '(?<Date>\w+\s+\d{1,2})\s+(?<Time>\d{2}:\d{2}:\d{2})\s+(?<Name>.*)'
$test | foreach-object {
$regMatch = [regex]::Match($_.Name, $regex)
$object = New-Object PSObject
Add-Member -InputObject $object -memberType NoteProperty -Name Date -Value $regMatch.Groups['Date'].Value
Add-Member -InputObject $object -memberType NoteProperty -Name Time -Value $regMatch.Groups['Time'].Value
Add-Member -InputObject $object -memberType NoteProperty -Name Name -Value $regMatch.Groups['Name'].Value
Add-Member -InputObject $object -memberType NoteProperty -Name SourceIP -Value $_.SourceIP
Add-Member -InputObject $object -memberType NoteProperty -Name DestinationIP -Value $_.DestinationIP
$object
} | export-csv D-sample.csv -notype