Powershell Get-Content,只想要第一次出现

时间:2017-07-06 14:20:06

标签: powershell

我正在进行一系列拆分以检查文件的每一行,并输出每行的格式化版本。

输入示例:

02/17-07:54:32.290169  [**] [1:1:0] other [**] [Priority: 0] {TCP} 100.100.100.212:6667 -> 192.168.5.81:2848
02/17-07:54:32.335595  [**] [1:1:0] other [**] [Priority: 0] {TCP} 100.100.100.212:6667 -> 192.168.5.81:2848
02/17-07:54:32.335628  [**] [1:1:0] other [**] [Priority: 0] {TCP} 192.168.5.81:2848 -> 100.100.100.212:6667
06/14-06:33:47.258621  [**] [1:1:0] other [**] [Priority: 0] {TCP} 192.168.4.85:4662 -> 69.192.30.179:80
06/14-06:33:47.258621  [**] [1:1:0] other [**] [Priority: 0] {TCP} 192.168.4.85:4662 -> 69.192.30.179:80
06/14-06:33:47.258621  [**] [1:1:0] other [**] [Priority: 0] {TCP} 192.168.4.85:4662 -> 69.192.30.179:80

当存在具有相同连接ID的字符串(在本例中为258621)时,我只需要第一次出现。

这会获取连接ID,但我不确定如何忽略可能跟随相同连接ID的任何行。

Get-Content $logFile -ReadCount 1 | % {

$_.Split()[0].Split(".")[1]

} | Out-File "C:\Log\logout.txt"

输出,我只想要第一次出现258621:

290169
335595
335628
258621
258621
258621

更棘手的部分是我还需要使用类似的东西重新格式化每一行(假设它不是重复的连接ID)(最终,我不希望输出中的连接ID):

'|' + (($_.Split()[9, 11, 4] -replace ':', '|') -join '|') + '|' 

期望的输出:

|100.100.100.212|6667|192.168.5.81|2848|other|
|100.100.100.212|6667|192.168.5.81|2848|other|
|192.168.5.81|2848|100.100.100.212|6667|other|
|192.168.4.85|4662|69.192.30.179|80|other|

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以在$thisID循环中使用Out-File语句,以确保之前未处理此连接ID。

由于它已分配给变量$connectionIDs,因此不会传递给Get-Content $logFile -ReadCount 1 | % { $thisID = $_.Split()[0].Split(".")[1] if($thisID -notin $connectionIDs){ '|' + (($_.Split()[9, 11, 4] -replace ':', '|') -join '|') + '|' [array]$connectionIDs += $thisID } } | Out-File "C:\Log\logout.txt" for fil in /drop/* do test -f "/target/$fil" if [ "$?" = 0 ] then suff=$(awk -F\. '{ print "."$NF }' <<<$fil) bdot=$(basename -s $suff $fil) mv "/drop/$fil" "/drop/${bdot}1$suff" cp "/drop/${bdot}1.$suff" "/target/${bdot}1$suff" fi done 也一样)

var url = string.Format("http://bbs.eamobiledirectory.com/Mobile/MobileApi.aspx?Action=NewSalesReport&unm={0}&assignID={1}&report_details={2}&appoi_date={3}",
                USERNAME,
                ASSIGNID,
                details,
                date);

var response = await client.PostAsync(url, null);

var responseContent = await response.Content.ReadAsStringAsync();

输出符合您问题中的内容。