2013-05-16 64 views
4

我有一個文本文件,其中包含數百行包含數據庫信息的文本。Powershell - 如何從文本文件獲取以前的行?

我想爲任何35GB的數據庫提取DatabaseId

我想使用Powershell查詢文件並生成包含所有匹配數據庫的文本文件。

因此,本質上,我想掃描一遍文件,找到一個DatabaseSize這是35,然後從前面3行中提取相應的DatabaseId

我已經看遍了整個網絡,但似乎無法找到任何可以做到這一點的東西。文本文件的

例提取物:

ServerId = VMlinux-b71655e1 
DatabaseId = db-ecb2e784 
Status = completed 
LocationId = 344067960796 
DatabaseSize = 30 

ServerId = VMlinux-0db8d45b 
DatabaseId = db-cea2f7a6 
Status = completed 
LocationId = 344067960796 
DatabaseSize = 35 

ServerId = VMlinux-c5388693 
DatabaseId = db-9a421bf2 
Status = completed 
LocationId = 344067960796 
DatabaseSize = 8 

etc 
+0

只是爲了補充一點,我一直在尋找用Select-String來標識行號,但是不能找到提取行號的方法:'$ matches = Select-St ring「DatabaseSize = 35」c:\ databases.txt $ matches |選擇LineNumber,Line' – user2390040

回答

6

與這樣的嘗試:

((GC myfile.txt | 
    Select-String 'DatabaseSize = 35' -Context 3).context.precontext)[0] 

在多場比賽的情況下:

(GC myfile.txt | 
SELECT-STRING 'DATABASESIZE = 35' -Context 3) | % { ($_.context.precontext)[0] } 
+0

謝謝 - 看起來很有前途,但它似乎只能給我一個結果。我需要做一個foreach等來獲得所有結果嗎? – user2390040

+0

@ user2390040在多個匹配的情況下添加代碼... –

+0

完美 - 非常感謝您的幫助!非常感謝:) – user2390040

相關問題