我试图想出一个很好的方法来格式化Parsed Line的输出,使用以下数据作为我实际搜索的一行,以便解析一些数据。
#Data from my File
2014-07-24 19:30:23 IP.ADD.RESS.# GET /:8888/xxx/update/status/CheckingForUpdates - 80 - 192.168.x.x - 400 0 0 15
所以我正在做的是在大文件中搜索这样的行。我实际上是在搜索CheckingForUpdates的关键字,然后将" xxx"和" 192.168.x.x"通过执行以下select-string行。
Select-String -path $FileLocation -Pattern "CheckingForUpdates" -AllMatches |
%{$_ -split"/"} | %{$_ -split"- "} | Select -Index 2,7
有了这个,我将得到一个输出:
xxx
192.168.x.x
所以我的问题是,当我处理来自我正在使用的实际文件的100个输出时,是否有人知道我可以创建一个易于阅读的格式?我希望的是
项目xxx正在使用,IP地址为192.168.x.x
我尝试了写入输出,但由于尝试在一行中使用Select -Index两次而未成功。 Powershell似乎根本不喜欢这样......任何帮助都会非常感激。
答案 0 :(得分:0)
使用您的示例数据,您会看到一个字符串数组输出。在我的回答中,我将该字符串数组分配给变量,并使用-f
格式参数格式化输出。
$data = "2014-07-24 19:30:23 IP.ADD.RESS.# GET /:8888/xxx/update/status/CheckingForUpdates - 80 - 192.168.x.x - 400 0 0 15"
$strings = $data | Select-String -Pattern "CheckingForUpdates" -AllMatches |
%{$_ -split"/"} | %{$_ -split"- "} | Select -Index 2,7
"Item {0} is using and IP Address of {1}" -f $strings[0],$strings[1]
这给了我们输出:
$data = "2014-07-24 19:30:23 IP.ADD.RESS.# GET /:8888/xxx/update/status/CheckingForUpdates - 80 - 192.168.x.x - 400 0 0 15"
$strings = $data | Select-String -Pattern "CheckingForUpdates" -AllMatches |
%{$_ -split"/"} | %{$_ -split"- "} | Select -Index 2,7
Item xxx is using and IP Address of 192.168.x.x
虽然我们不必使用-f
,但它肯定会清理代码以使其更易于阅读。有关它的更多信息,请参见here