2014-12-13 62 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/' 

如果你想保持标题行,改变&&||