powershell - 如何切断 -Delimiter -Header 'xxx' 下列中的所有值
问题描述
我的重要代码部分(这有效):
$getFile = Get-Content $file |
ConvertFrom-Csv -Delimiter ";" -Header "Printer","Model","MAC","IP_adresa","ID_terminalu" |
Sort-Object -Property MAC, IP_adresa |
Group-Object MAC |
ForEach {$_.Group | Select-Object -First 1} |
ConvertTo-Csv -NoTypeInformation |
% {$_.Replace('"','')} |
Select-Object -SkipLast 1
我在 CSV 中的标题是:“打印机”、“型号”、“MAC”、“IP_adresa”、“ID_terminalu”。问题是在某些特定行中,“MAC”字段包含两个用 分隔的 MAC 地址,
,例如:
苹果电脑 00-1B-A9-85-88-1A,00-22-58-5E-7D-31
使用脚本后,我从这些特定行获得输出,如下所示:
打印机型号 MAC IP_adresa ID_terminalu TCZ176100 Brother_MFC 00-1B-A9-85-88-1A 00-22-58-5E-7D-31 192.168.xx
在这个特定的行中,IP 地址移动了一个位置,而 MAC 在这里是 2x,这很糟糕。
我只需要为 17 个字符的 MAC 标头切断所有行 == 长度为一个 MAC 地址。我尝试了很多不同的方法,但都没有奏效。我不知道如何获取特定标题下的值(当标题有 5 个属性时)并从中编辑一个特定的值。
我试过这个(不起作用):
$getFile = (Get-Content $file | ConvertFrom-Csv -Delimiter ";" -Header 'Tiskarna','Model','MAC','IP_adresa','ID_terminalu') |
select Tiskarna, Model, @{Name="MAC".Substring(0,16);Expression={$_."MAC"}}, IP_adresa, ID_terminalu |
Sort-Object -Property MAC, IP_adresa |
Group-Object MAC |
ForEach {$_.Group | Select-Object -First 1} |
ConvertTo-Csv -NoTypeInformation |
% {$_.Replace('"','')} |
Select-Object -SkipLast 1
解决方案
假设您只需要第一个 MAC 地址,您应该执行以下操作:
$headers = 'Printer', 'Model', 'MAC', 'IP_adresa', 'ID_terminalu'
$csv = Import-Csv -Delimiter ';' -Header $headers
foreach ($row in $csv) {
if ($row.MAC.Contains(',')) {
$row.MAC = $row.MAC.Split(',')[0]
}
}
$csv | Sort-Object MAC, IP_adresa | ...
推荐阅读
- c# - 您如何使用 System.Net.Http.HttpClient 的基本身份验证?
- sql-server - 从存储过程中获取返回值为 -1
- angular - 为什么“回
“ 不管用? - c# - 在填充的数据表中将 datetime 列从 utc 转换为本地时间
- python - 将大文件从 URL 直接流式传输到 gzip 文件中
- google-oauth - 无法将 http url 添加到 gcloud 的 OAuth 2.0 客户端 ID 中的授权重定向 URI
- javascript - Mozilla Firefox 版本 69.0 未检测到 ALT 键事件
- python - 如何通过用户输入从两个数字(a,b)生成数字范围
- python-3.x - 在同一行代码进行编码和解码的目的是什么?
- vue.js - 如何在递归Vue组件中向直接父级发出事件?