2014-12-13 59 views
0

輸出的每一行我有我使用ssh和使輸出如下運行在遠程計算機上的命令腳本:如何查看我以前的Linux命令的外殼

[email protected]:~/>: mccli checkpoint show 

0,23000,CLI command completed successfully. 

Tag     Time      Validated Deletable  
................. ....................... ......... ............. 

cp.20141212170053 2014-12-12 09:00:53 PST Validated No  
cp.20141212170337 2014-12-12 09:03:37 PST    No 

現在,我必須得到這個輸出,並且需要爲已經驗證的列中具有" "(沒有條目)的那些選擇Tag列中的值。這樣我就可以使用該標記值執行操作。這裏第二行沒有在驗證列下的條目。我會盡量把輸出更加清晰: 第一行中,

cp.20141212170053 - 1st column value (under Tag)  
2014-12-12 09:00:53 PST - 2nd column value (under Time)  
Validated - 3rd column value (under Validated)  
No - 4th column value (under Deletable) 

我試圖通過採取整體輸出到一個數組和檢查一樣。 但是,我無法在此處繼續。我失去了完成這一任務的邏輯。

如何檢測這些行?

+0

我會使該命令輸出更清晰。 – Jkreddy 2014-12-13 10:02:35

+0

總是在PST時代? – SMA 2014-12-13 10:08:53

+0

是的..時間總是在PST – Jkreddy 2014-12-13 10:15:23

回答

0

這是在做同樣的事情的sed的版本:

mccli checkpoint show | sed -rne '/^(cp.[0-9]+).*Validated.*$/ !{s/^(cp.[0-9]+).*$/\1/p}' 

/^(cp.[0-9]+).*Validated.*$/此部分搜索行以cp.開頭,包括Validated。通過!,我們可以讓{s/^(cp.[0-9]+).*$/\1/p}在沒有該模式的線路上運行。所以實際上下面的行被處理,但它們不以cp.[0-9]+開頭,所以不能打印。請查詢this瞭解如何使用sed。

0,23000,CLI command completed successfully. 

Tag     Time  Validated Deletable  
................. ...................... ............ ............. 
cp.20141212170337 2014-12-12 09:03:37 PST    No 
+0

謝謝Juji,這工作。但是,我清楚地理解你給我的命令。你能更詳細地瞭解這個命令嗎? – Jkreddy 2014-12-13 10:40:49

+0

@Jkreddy。我在答案中添加了一些解釋。一探究竟。如果有幫助,請投票。 – D3Hunter 2014-12-13 10:54:59

+0

酷..感謝它非常清楚:) – Jkreddy 2014-12-13 10:57:06

0

您可以使用此awk命令:

mccli checkpoint show | awk -F ' {2,}' '/ PST/ && $(NF-2) != "Validated"{print $1}' 
cp.20141212170337 
  • 它假定輸入字段分隔爲2米或更多的空間。
  • 由於時間總是在它只是檢查時區名稱。

如果你不想檢查值Validated,那麼你也可以使用:

awk -F ' {2,}' '/ PST/ && NF<4{print $1}' 
+0

嗨Anubhava,我試過這個,它爲這兩行條目工作。我的這個命令的輸出總是變化,我的領域是不恆定的。輸出每次都在增長。我可以在增長的輸出中使用它來檢查每行中的驗證列嗎?請澄清 – Jkreddy 2014-12-13 10:54:12

+0

是的,只要您的輸出結構保持不變,就應該這樣工作。 – anubhava 2014-12-13 11:30:33

0

我不清楚如果你想保留標題行,所以我放棄它們(NR> 6)。一些很簡單的解決方案是:

mccli ... | awk 'NR>6 && NF<6' 
mccli ... | awk 'NR>6 && !/Validated/' 

如果你想保持標題行,改變&&||