2013-03-15 61 views
1

我正在尝试做一些在Powershell中应该很简单的事情,但我不能为我的生活弄明白。我有一个看起来像这样的日志文件:格式化令牌字符串 - 表

item1:some text 1:more junk I don't care about. 
item2:some text 2:more junk I don't care about. 
item3:some text 3:more junk I don't care about. 
... 

我想用PowerShell来分割上“:”,抢前两个项目,然后以某种方式将结果转换成东西,我可以管格式化-表。最终结果将如下输出:

Column A   Column B 
--------   -------- 
item1    some text 1 
item2    some text 2 
item3    some text 3 
... 

我绝不是Powershell专家,所以请随时清理我的代码。这是我目前有(我已经尝试了几个变化):

Get-Content C:\Temp\test.log | %{ 
    $data = $_.split(":"); 
    $hashString = 'a = ' + $data[0] + " `n b = " + $data[1]; 
    ConvertFrom-StringData -StringData $hashString 
} | ft @{Label="Column A"; Expression={$_.a}}, @{Label="Column B"; Expression={$_.b}} -auto 

在此先感谢。

回答

4

我会用进口-CSV为... :)

Import-Csv -Path your.log -Delimiter : -Header ColumnA, ColumnB 

您可以使用任何字符作为分隔符,包括结肠癌。

+0

您的答案适用于这种情况,所以我将其标记为已接受,但我仍然希望对我的问题采用更一般的答案。如何使文本变为可以使用format-table命令显示/处理的格式? – shellster

+1

那么,在这种情况下,正则表达式通常是答案。您只需从字符串创建自定义对象,然后可以执行任何您想要的操作:筛选,排序和格式化为表格。我已经以使用$匹配的方式发布了博文,使得它很容易实现:http://becomelotr.wordpress.com/2013/01/07/quick-tip-matches-is-enough/但是有很多方法去皮这只猫。 – BartekB

+0

正是我在找的东西!谢谢! – shellster