Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Object 操作导入的csv数据时出现问题,导致出现空行_Object_Powershell - Fatal编程技术网

Object 操作导入的csv数据时出现问题,导致出现空行

Object 操作导入的csv数据时出现问题,导致出现空行,object,powershell,Object,Powershell,我是powershell的新手,所以我希望我没有遗漏任何非常明显的东西。我试图搜索该网站,但很难找到与这个确切问题相关的参考资料。我正在尝试使用管道深度计从csv文件中仅输出某些列(对象)。我的实际文件有40多列和数千个条目。我希望使用其他powershell命令,仅按特定列对数据进行排序和唯一化。不幸的是,我甚至无法对数据进行最简单的简化 我的示例文件: Letter | Number | IpAddress | Machine | User | Garbage a | 5 | 127.0.0

我是powershell的新手,所以我希望我没有遗漏任何非常明显的东西。我试图搜索该网站,但很难找到与这个确切问题相关的参考资料。我正在尝试使用管道深度计从csv文件中仅输出某些列(对象)。我的实际文件有40多列和数千个条目。我希望使用其他powershell命令,仅按特定列对数据进行排序和唯一化。不幸的是,我甚至无法对数据进行最简单的简化

我的示例文件:

Letter | Number | IpAddress | Machine | User | Garbage
a | 5 | 127.0.0.1 | tower | Admin | randomcharacters
f | 193 | 127.0.0.2 | laptop | administrator | charactersrandom%
r | 2882 | 127.0.0.8 | workstation | user1 | nothi$gher@e
两者

提供相同的结果

Name        MemberType   Definition                            
----        ----------   ----------                            
Equals      Method       bool Equals(System.Object obj)        
GetHashCode Method       int GetHashCode()                     
GetType     Method       type GetType()                        
ToString    Method       string ToString()                     
Garbage     NoteProperty System.String Garbage=randomcharacters
IpAddress   NoteProperty System.String IpAddress =127.0.0.1    
Letter      NoteProperty System.String Letter =a               
Machine     NoteProperty System.String Machine =tower          
Number      NoteProperty System.String Number =5               
User        NoteProperty System.String User =Admin    
但当我指定对象时,System.String消失,输出只是空行

import-csv .\sample.txt -Delimiter "|" | select-object User | get-member


   TypeName: Selected.System.Management.Automation.PSCustomObject

Name        MemberType   Definition                    
----        ----------   ----------                    
Equals      Method       bool Equals(System.Object obj)
GetHashCode Method       int GetHashCode()             
GetType     Method       type GetType()                
ToString    Method       string ToString()             
User        NoteProperty  User=null

我哪里做错了?我只想导入数据,然后只输出几列。指定一个或多个将失败。我甚至试着使用{$\u.User}对象,就像我在类似文章中读到的那样,但它返回相同的问题。

问题是,创建属性名时,在末尾有一个空格。所以你必须这样做:

import-csv .\sample.txt -Delimiter "|" | select-object "User "
那么如何解决这个问题呢

我想您可以手动修复它,或者在使用
Import Csv
之前使用类似的代码:

(Get-Content -path .\sample.txt) -replace ' \| ','|' | Set-Content -Path .\sample.txt

这也将确保属性值中没有多余的空间。

正如Andy所说,属性名称和值中有多余的空间。下面是解析文件的另一种方法

Get-Content .\sample.txt | 
ForEach-Object {$_ -replace ' \| ','|'} | 
ConvertFrom-Csv -Delimiter '|'

我没有意识到它保留了尾随空间。我想如果不使用前面的空格,它就不会使用后面的空格。谢谢我觉得事情很简单,我在绞尽脑汁。再次感谢,对不起,我无法反驳你的评论,
Get-Content .\sample.txt | 
ForEach-Object {$_ -replace ' \| ','|'} | 
ConvertFrom-Csv -Delimiter '|'