0

我有一个制表符分隔的文件,我正在通过 foreach 循环运行以匹配值。

foreach($mvalue in $mvalues) {
$vName = $mvalue.Name
$filter = "`"" + $vName + "/``t`""
$mMatch = gc d:\test.txt | select-string $filter
Write-Output $vName
Write-Output $filter
Write-Output $mMatch }

即使 $filter 正确,$mMatch 也没有输出,我可以在控制台中使用 $filter 的值进行测试,它会给我结果。值得一提的是,并非所有行都与我正在搜索的值匹配;但是有一些可以做到,对于那些我希望它输出值的人。我在 Windows 2003 上运行 2.0。

4

4 回答 4

1

您可以将其转换为 csv 格式并为列指定一个有意义的名称:

Get-Content TabDlimited.txt | 
ConvertFrom-Csv -Header col1,col2,col3 -Delimiter "`t"  |
Where-Object {$_.col1 -match 'whatever'}
于 2012-06-26T09:08:52.870 回答
1

我最近有一个类似的要求,我想从文件中搜索字段中的值列表,就像在 SQL 中我们使用 IN 子句

select * from table where column in (List of values)

使用以下实现 -

$lstExpenseID = @("VAL1"
 ,"VAL2"
 ,"VAL3")

Get-ChildItem -Filter "*.txt" -Path .\ |
ForEach-Object {
  Import-Csv -Delimiter `t -Path $_.FullName | Where-Object -Property "Cust id" -In -Value $lstExpenseID
}
于 2019-12-09T15:29:19.157 回答
0

总是小事:

我从变量周围删除了括号:

$filter = $vName + "/\t"
$mMatch = gc d:\test.txt | select-string -pattern $filter
于 2012-06-26T15:18:49.430 回答
0

尝试像这样编写过滤器(\t 用于正则表达式中的制表符):

$filter = "`"$vName/\t`""
于 2012-06-26T03:46:32.267 回答