2012-02-13 66 views
1

所以我想使用shell脚本来自动执行一个手动任务,但是我对于如何解析一些命令的输出有点遗憾。我可以在没有任何问题的情况下在其他语言中使用这个功能,因此我只会解释我在伪代码中要做的事情,并提供一个我试图解析的cmd输出示例。输出Shell脚本 - 如何正确解析输出,学习示例。

例子:

变动2167467上2012/02/13由user1234 @文件名 '提交的说明'

我需要分析出是 '2167467'。所以我想要做的就是分割空间并将元素1用于另一个命令。我的下一个命令的输出是这样的:在2012/02/13 18时10分15秒

description of submission 

受影响的文件

变化2167463由user1234 @文件名...

。 .. //文件路径/ DIR1/DIR2/DIR3 /文件名#2298编辑

我需要解析出 '//文件路径/ DIR1/DIR2/DIR3 /文件名#2298',并使用在另一个命令。再次,我会做的是从输出中删除空行,抓住第四行,并在空间上分割。从那里,我会抓住分割的第一个元素,并在我的下一个命令中使用它。

如何在shell脚本中执行此操作?示例或指向一些教程会很好。

回答

1

其不清楚您是否想使用第一个命令的结果来处理第二个命令。如果这是真的,那么

targString=$(cmd1 | awk '{print $2}') 
command2 | sed -n "/${targString}/{n;n;n;[email protected]*[/][/]@//@;p;}" 

您的示例数据中有2个不同的变动值,(2167467,2167463),所以如果你只是想处理此输出两种不同的方式,它更简单

cmd1 | awk '{print $2}' 
cmd2 | sed -n '/Change/{n;n;n;[email protected]*[/][/]@//@;p;}' 

我希望这有助于。

+0

所有的想法都很不错,但这个帮助最大。我结束了找到xargs,与此同时,它完美的作品:' | awk'{print $ 2}'| xargs | grep'^ \。\。\。' | awk'{print $ 2}' ' – user797963 2012-02-16 18:23:05

0

你的第一个变量是这样的

temp="Chg 2167467 on 2012/02/13 by [email protected] 'description of submission'" 

收获的人的数量,你要做到这一点:

temp=`echo $temp | cut -f2 -d" "` 

让你的第二个命令的输出保存到一个像这样的文件

command $temp > file.txt 

为了得到你想要的文件,你可以运行这个什么:

temp=`tail -1 file.txt | cut -f2 -d" "` 
rm file.txt 

代码的最后块获取文件的最后一个非白人线并限定在第二组空格