首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从select-string匹配中获取特定项。

从select-string匹配中获取特定项。
EN

Stack Overflow用户
提问于 2022-10-13 11:14:39
回答 2查看 43关注 0票数 1

我有个csv文件。我正在使用select-string搜索一个值。我需要标识特定列$LineCui上返回的值

代码语言:javascript
复制
$sLine= New-Object System.Collections.Hashtable
$sText = @"
Vendorid,Cui,Data,iStaus,CashVat
404,20955366,2022-08-11,1,True
1025,15293910,2022-08-11,-1,False
2022,27684873,2022-08-11,2,True
3055,29195059,2022-08-11,3,False
"@;
$csvText= $sText | ConvertFrom-csv -Delimiter ','
$sLine = $csvText |Select-string -Pattern '15293910' -SimpleMatch -Encoding utf8 

找到的对象看起来像哈希表。

代码语言:javascript
复制
'=====Match is is======='
 $sLine
'=====Match was======='

返回的值是

=====Match是is=======

@{Vendorid=1025;Cui=15293910;Data=2022-08-11;iStaus=-1;CashVat=False}

=====Match was=======

但是下面的代码行不返回值

代码语言:javascript
复制
'=====Get the desired value for the key======='
 $sLine['CashVat'].value
'================================='

在调试窗口中不返回任何内容。

另外,GetEnumerator不返回键值对。

代码语言:javascript
复制
 $sLine.GetEnumerator() | ForEach-Object {
                          $message = '{0} is key {1} value' -f $_.key, $_.value
                          write-output $message
                         }  

只需列出<> 73次,这相当于$sLine变量的长度,看起来$sLine只是一行文本,而不是哈希表格式。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-10-13 11:59:33

$sLine不是哈希表,而是由Select-String拒绝的MatchInfo对象。

sls在这里做的另一件事是将数组中的每个对象转换为字符串表示(类似于哈希表定义),然后将模式与该字符串匹配。因此,它还将匹配大括号、分号和属性名称。

但是,如果您已经将csv文本转换为对象数组,则可以直接搜索它,不需要使用select-string:$csvText | Where-Object Cui -EQ '15293910'

或者在原始csv:$sls = $sText | Select-String '15293910'上使用select-string如果您跳过-SimpleMatch,您将在MatchInfo:$sls.Matches中捕获到文本(这也适用于您的原始示例)。

票数 1
EN

Stack Overflow用户

发布于 2022-10-13 11:58:46

您可以使用Where选择器。

代码语言:javascript
复制
$sLine = $csvText | where {$_.Cui -eq 15293910}
$sLine.CashVat 

它将返回False

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74054852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档