Powershell: Import-CSV ,定界符和拆分组合 - 如何?
Powershell: Import-CSV , delimiter and split combined - how?
Objective: 遍历包含带有日志文件的子目录的目录,使用 Powershell 以 Syslog RFC 5424 IETF 格式在日志文件的列中列出主机名。
输出: 主机列表,它们的 IP 和日志行的时间戳
日志文件中的格式为:col1 TAB col2 TAB col3 TAB col4 TAB col5 TAB col6
col6
包含各种项目,由单个 SPACE 分隔,我在主机名之后(在示例中:MyHost01
)。
到目前为止,下面的例子给了我很多这样的行:
2020-12-14 16:16:13 User.Notice 10.100.210.60 1 2020-12-14T16:17:44.755522+00:00 MyHost01 - - - [NXLOG@14506 EventReceivedTime="2020-12-14 16:17:43" SourceModuleName="auditlog" SourceModule...
# Example - yields timestamp, info, IP address and raw message
$filelist = Get-ChildItem -Recurse -Path D:\Logs -Include *.txt
foreach ($textfile in $filelist) {
$filepath = $textfile.fullname
Import-Csv $filepath -Delimiter "`t" -Header col1,col3,col4,col6 | Format-Table col1,col3,col4,col6
}
为了实现我的 objective,我需要将 col6
除以 SPACE。如何在我的脚本中完成此操作?
我在您的示例数据中看不到制表符。假设主机名是第 6 列的第一个子字符串:
Import-Csv $filepath -Delimiter "`t" -Header col1,col3,col4,col6 |
Select-Object col1, col3, col4, @{ n = 'col6'; e = { ( $_.col6 -split ' ' )[0] } } |
Format-Table
Select-Object
is used to to pass through columns 1, 3 and 4. Column 6 is defined as a calculated property 通过使用哈希表,它是以下形式的缩写:
@{
name = 'col6' # Name of the output column
expression = { ( $_.col6 -split ' ' )[0] } # Calculated value
}
在表达式中,-split
运算符用于将第 6 列的原始值拆分为 space,其中 returns 是一个子字符串数组。该数组的第一个元素将是用于第 6 列的值。如果需要提取另一个子字符串,请将索引 [0]
更改为其他内容。
Objective: 遍历包含带有日志文件的子目录的目录,使用 Powershell 以 Syslog RFC 5424 IETF 格式在日志文件的列中列出主机名。 输出: 主机列表,它们的 IP 和日志行的时间戳
日志文件中的格式为:col1 TAB col2 TAB col3 TAB col4 TAB col5 TAB col6
col6
包含各种项目,由单个 SPACE 分隔,我在主机名之后(在示例中:MyHost01
)。
到目前为止,下面的例子给了我很多这样的行:
2020-12-14 16:16:13 User.Notice 10.100.210.60 1 2020-12-14T16:17:44.755522+00:00 MyHost01 - - - [NXLOG@14506 EventReceivedTime="2020-12-14 16:17:43" SourceModuleName="auditlog" SourceModule...
# Example - yields timestamp, info, IP address and raw message
$filelist = Get-ChildItem -Recurse -Path D:\Logs -Include *.txt
foreach ($textfile in $filelist) {
$filepath = $textfile.fullname
Import-Csv $filepath -Delimiter "`t" -Header col1,col3,col4,col6 | Format-Table col1,col3,col4,col6
}
为了实现我的 objective,我需要将 col6
除以 SPACE。如何在我的脚本中完成此操作?
我在您的示例数据中看不到制表符。假设主机名是第 6 列的第一个子字符串:
Import-Csv $filepath -Delimiter "`t" -Header col1,col3,col4,col6 |
Select-Object col1, col3, col4, @{ n = 'col6'; e = { ( $_.col6 -split ' ' )[0] } } |
Format-Table
Select-Object
is used to to pass through columns 1, 3 and 4. Column 6 is defined as a calculated property 通过使用哈希表,它是以下形式的缩写:
@{
name = 'col6' # Name of the output column
expression = { ( $_.col6 -split ' ' )[0] } # Calculated value
}
在表达式中,-split
运算符用于将第 6 列的原始值拆分为 space,其中 returns 是一个子字符串数组。该数组的第一个元素将是用于第 6 列的值。如果需要提取另一个子字符串,请将索引 [0]
更改为其他内容。