我有一个制表符分隔文件,我正在通过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 }
$ mMatch即使$ filter正确也没输出,我可以在控制台中使用$ filter的值进行测试,它会给我结果。值得一提的是,并非所有行都匹配我正在搜索的值;但有些人会这样做,而我希望它能输出价值。我在Windows 2003上运行2.0。
答案 0 :(得分:1)
您可以将其转换为csv格式,并为列提供有意义的名称:
Get-Content TabDlimited.txt |
ConvertFrom-Csv -Header col1,col2,col3 -Delimiter "`t" |
Where-Object {$_.col1 -match 'whatever'}
答案 1 :(得分:1)
我最近有一个类似的要求,我想从文件中搜索字段中的值列表,就像在SQL中,我们使用IN子句
从表(值列表)中的列中选择*
使用以下命令实现-
$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
}
答案 2 :(得分:0)
尝试写这样的过滤器(\ t是正则表达式中的标签):
$filter = "`"$vName/\t`""
答案 3 :(得分:0)
总是小事:
我从变量周围删除了括号:
$filter = $vName + "/\t"
$mMatch = gc d:\test.txt | select-string -pattern $filter