2015-10-15 27 views
3

我是Powershell的初学者。我有一些疑问。我正在使用Import-Csv cmdlet生成从旧软件生成的制表符分隔文本文件。以下是分隔文件的等效版本。从文本文件我有过滤具有这些条目的destination->observability§bin为1连字符输入参数中的对象Powershell

Time [s]  Offset_Angle  destination->observability§bin 
0.00E+00  -0.20402611670286  0.00000000000000E+00 
4.32E+02  0.21319658757004  0.00000000000000E+00 
8.64E+02  0.26803683992125  0.00000000000000E+00 
1.30E+03  2.67379011780784  1.00000000000000E+00 
1.73E+03  -2.89704767087971  1.00000000000000E+00 
2.16E+03  -2.93302157473406  1.00000000000000E+00 

的代码片段是如下

$ap = Import-Csv -Delimiter "`t" -Path E:\Myfiles\textfile.txt 

$ap|where-Object {$_.destination->observability§bin -eq "1.00000000000000E+00”} 

我拿到了第一线工作。当我执行第二行时,它会引发错误消息。

At line:1 char:34 
+ $ap|where-Object {$_.destination->observability§bin 
+         ~         
You must provide a value expression following the '-' operator. 
At line:1 char:53 
+ ... _.destination->observability§bin -eq '1.0000 ... 
+          ~~~                
Unexpected token '-eq' in expression or statement. 
    + CategoryInfo   : ParserError: (:) [], ParentContainsErrorRecordException 
    + FullyQualifiedErrorId : ExpectedValueExpression 

所以我想它需要输入参数中的' - '符号作为运算符(char 34)。我还在 - 符号之前尝试了一些转义字符,例如后面的​​勾号(`)。但没有得到任何东西。请帮我解决一下这个。

谢谢。

+0

“observability”和“bin”之间的字符在我的环境中呈现为奇怪的东西。它看起来不像连字符,我认为它不是一个合法的符号组成部分。 –

回答

3

你应该放在引号:

$ap | Where-Object {$_."destination->observability§bin" -eq "1.00000000000000E+00"} 

尽管也可能与§字符

+1

你最后的报价是卷曲的:'E + 00''。我不能建议一个字符编辑,所以这里是评论。 – beatcracker

2

尝试使用进口CSV cmdlet的-header子句来提供自己的名字的问题三个领域,并命名他们合理的。您可能必须对其进行编程以跳过csv的第一条记录,以防止将实际标题看作是第一条记录。

0

谢谢大家。在引号中添加名称不起作用。当我将标题名称更改为没有连字符和任何其他特殊字符的合法标题时,它起作用

+0

如果您将自己的答案标记为正确,则会阻止他人尝试回答问题。在这样的情况下,您可以合法地发布问题,并在稍后获得答案。 –