Bash
BASH 腳本 - 讀取輸出並按值切割
我正在嘗試創建一個 BASH 腳本,它將執行一個命令,過濾該命令的輸出,然後讀取該輸出的結果,然後只列印滿足給定要求的部分。
例如:
我設法減少了原始命令的輸出,使輸出看起來像這樣:
Profile: 1 PsA of Profile 1: 13 PsL of Profile 1: 15 Profile: 2 PsA of Profile 2: 0 PsL of Profile 2: 0
我正在嘗試編寫一個 BASH 腳本,它將單獨讀取每個配置文件部分,並且只列印 PsA 和 PsL 值大於 0 的配置文件編號。
為清楚起見,輸出只需為配置文件值,因此在此範例中 - 1,丟棄 2。
由於我正在嘗試做的工作,它也確實需要是一個 BASH 腳本。
我對這一切都很陌生,完全被困住了。請幫忙!
** 編輯 ** 為了清楚起見,我正在嘗試使用波動率框架。我正在查看可以獲得的配置文件,目前 - 確切的輸出如下所示:
Profile suggestion (KDBGHeader): WinXPSP3x86 PsActiveProcessHead : 0x8055a158 (31 processes) PsLoadedModuleList : 0x80553fc0 (122 modules) Profile suggestion (KDBGHeader): WinXPSP2x86 PsActiveProcessHead : 0x8055a158 (31 processes) PsLoadedModuleList : 0x80553fc0 (122 modules)
我需要讓腳本檢查 PsActiveProcessHead 和 PsLoadedModuleList(PsA 和 PsL)——特別是找到的程序和模組的數量——如果括號中顯示的兩者都高於 0,則列印配置文件建議。可能有 1 個配置文件建議,可能還有更多 - 我需要腳本來輸出找到的任何配置文件,其中包含 0 以上列出的模組和程序。
對於不清楚的原始問題,我深表歉意,我試圖使其更簡單並調整答案,但仍在苦苦掙扎。對不起!
(為了清楚起見,以上只是輸出格式的一個例子,它們並不總是都有大於 0 的數字,並且可能有超過 2 個配置文件建議)
您可以使用
sed
一個N;D
方案:sed -n 'N;s/PsA\( of Profile \([0-9]*\): \)[^0].*\nPsL\1[^0].*/\2/p;D'
N
追加下一行,因此您在模式空間中始終有兩個。然後,您只需使用相同配置文件的兩個值和一個不以零開頭的數字定義一個模式(因此帶有前導零的值將失敗!)。如果匹配,則將模式替換為引用的配置文件編號並將p
其替換掉(而預設輸出由-n
選項禁用。然後從 重新開始D
,如果有兩個則減少前面的行。根據問題更新更新
對於您給出的真實世界場景,我建議採用不同的方法:
sed -n '/Profile suggestion/!d;h;n;/(0/d;n;//d;g;p' yourfile
解釋:
/Profile suggestion/!d
表示:刪除所有沒有配置文件建議的行。在此處停止腳本以繼續下一行。h
將配置文件建議複製到保留空間,以便我們可以在需要時列印它n
繼續下一行。由於命令的-n
選項,目前未列印sed
/(0/d
如果我們找到該模式,則刪除此循環(0
,因為這意味著沒有程序n;//d
就像上面一樣,以確保第二行也有程序- 在腳本的這一點上,我們知道我們有一個 prilfe 建議,後面有兩行,每行都有一個非零數量的程序。
g
將保留空間複製回模式空間,因此我們可以p
修改建議