根据日期复制文本文件的部分

时间:2014-07-22 21:34:40

标签: powershell

我在尝试复制包含给定列的相同日期的日志文件的一部分时遇到问题。这些列没有标题。

以下是

的某些行的示例

fax@email.com {SMP}fax@email.com RX 1234 18:00 06/26/14 0 F 001 1234567890

fax@email.com {SMP}fax@email.com RX 1234 19:01 06/26/14 0 F 001 1234567890

fax@email.com {SMP}fax@email.com RX 1234 20:02 06/26/14 0 F 001 1234567890

fax@email.com {SMP}fax@email.com RX 1234 21:03 06/26/14 0 F 001 1234567890

fax@email.com {SMP}fax@email.com RX 1234 01:04 06/27/14 0 F 001 1234567890

如果我有这5行数据,从6/26/14开始,我想复制这些行并导出到新文件。忽略在6/27/14列出的行,因为它不是我想要的。

文件导出到.log,而不是csv。它们似乎是制表符分隔的,但它只是一个日志文件。

我认为我可以采用Get-Content的途径,可能使用管道传输到ForEach-Object(使用if语句查找具有相同日期的行)。

任何想法都会有所帮助,谢谢!

3 个答案:

答案 0 :(得分:1)

您可以在这里找到一些选项。对于需要在文本文件中进行简单匹配的类似的东西,最简单的是select-string:

Select-String -Path C:\Path\To\File.log -SimpleMatch "06/26/14" | Select -Expand Line | Out-File C:\Path\To\NewFile.log

如果您需要更复杂的东西,可以通过Get-Content / Where流程运行它,甚至可以根据需要使用正则表达式匹配:

GC C:\Path\To\File.log | ?{$_ -match "06/26/14"}|Out-File C:\Path\To\NewFile.log

或者,如果您需要操作数据,可以在选项卡上将其拆分,并创建要添加到数组的对象。如果你想走那条路,就这么说,我可以帮助你完成这个过程。

答案 1 :(得分:0)

你可以这样做:

get-content <file path> | foreach-object {if($_.contains("06/26/14")){$_ | out-file <newfilepath>.log -append}}

答案 2 :(得分:0)

如果您只是尝试从包含06/26/14的日志文件中选择行并将其复制到另一个文件,则可以这样做:

Get-Content <path> | Select-String '06/26/14' | Out-File <path>

或者这样:

(Get-Content <path>) -match '06/26/14' | Out-File <path>