使用powershell获取文本文件中的列

使用powershell获取文本文件中的列,powershell,Powershell,我有一个文本文件,包含10列 现在我的问题是:我需要搜索一个字符串并获得带有所需列的输出 示例:我的文本文件包含: #Fields: date time s-sitename s-computername s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs-version cs(User-Agent) cs(Referer) cs-host sc-status sc-win32-status sc-bytes cs

我有一个文本文件,包含10列

现在我的问题是:我需要搜索一个字符串并获得带有所需列的输出

示例:我的文本文件包含:

#Fields: date time s-sitename s-computername s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs-version cs(User-Agent) cs(Referer) cs-host sc-status sc-win32-status sc-bytes cs-bytes time-taken
2014-06-01 00:00:00 W3SVC1 abc814 121.30.83.14 POST /ASP1/WebServices/cloud.asmx - 80 - 70.27.127.10 HTTP/1.1 Mozilla/4.0+(compatible;+MSIE+8.0;+Windows+NT+5.1;+Trident/4.0;+.NET+CLR+2.0.50727;+.NET+CLR+3.0.4506.2152;+.NET+CLR+3.5.30729;+.NET4.0C;+.NET4.0E) http://cloud.each.com/ASP1/cloud/Operator.swf cloud.each.com 200 0 3889 5054 46
2014-06-01 00:00:00 W3SVC1 abc814 121.30.83.14 POST /ASP1/WebServices/range.asmx - 80 - 70.27.127.10 HTTP/1.1 Mozilla/4.0+(compatible;+MSIE+8.0;+Windows+NT+5.1;+Trident/4.0;+.NET+CLR+2.0.50727;+.NET+CLR+3.0.4506.2152;+.NET+CLR+3.5.30729;+.NET4.0C;+.NET4.0E) http://cloud.each.com/ASP1/cloud/Operator.swf cloud.each.com 200 0 3889 5054 46
现在,我需要搜索range.asmx,并只获取不同excel文件的有限列(时间、服务器名称、IP)

谢谢, Kalyan

删除#字段,使其成为CSV格式,以空格分隔。然后:

$search = 'range.asmx'
$data = Import-Csv data.csv -Separator ' '
$data | ? cs-uri-stem -like "*$search*" | select time,'s-ip','cs-host','sc-status'
该#Fields行无法正确解析为标头,因此需要对其进行一些处理,以使其在Powershell中正常工作:

$search = 'range.asmx'

$header = (Get-Content data.csv -TotalCount 1).Replace('#Fields: ','').split()
Get-Content data.csv |
select -Skip 1 |
ConvertFrom-Csv  -Delimiter ' ' -Header $header |
where { $_.'cs-uri-stem' -like "*$search*" }|
select time,'s-ip','cs-host','sc-status'

“#”是在CSV文件中引入注释的常用约定。但是,我不知道导入Csv中的解析器是否检测到并删除了注释。嗨,我也需要一些时间。当我在脚本中保留time take时,它不会给出结果,而是显示为空。例如:第一行,末尾是数字46(即所用时间)。你能在这方面指导我吗?