我有一个脚本,我使用ssh在远程机器中运行命令,输出如下:
admin@dear:~/>: 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 :(得分:0)
您可以使用此awk命令:
mccli checkpoint show | awk -F ' {2,}' '/ PST/ && $(NF-2) != "Validated"{print $1}'
cp.20141212170337
PST
,因此只检查时区名称。如果您不想检查价值Validated
,那么您也可以使用:
awk -F ' {2,}' '/ PST/ && NF<4{print $1}'
答案 1 :(得分: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
答案 2 :(得分:0)
我不清楚你是否要保留标题行,所以我要丢弃它们(NR> 6)。一些非常简单的解决方案是:
mccli ... | awk 'NR>6 && NF<6'
mccli ... | awk 'NR>6 && !/Validated/'
如果您想保留标题行,请将&&
更改为||
。