Powershell过滤器制表符分隔文本文件

时间:2012-06-26 00:15:21

标签: powershell

我有一个制表符分隔文件,我正在通过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。

4 个答案:

答案 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
相关问题