我是Bash脚本编程的新手,但确实了解了大多数基础知识。我的方案如下:
我有一台服务器,通过cURL可以从中获取大量数据。这是正确解析(XML格式),然后从这些结果中提取我想要的数据。 cURL语句将其输出写入名为temp-rec-schedule.txt
的文件。下面的代码是我用来获取我想在进一步计算中使用的值。
MP=`cat temp-rec-schedule.txt | grep "<ns3:mediapackage" | awk -F' ' '{print $3}' | cut -d '=' -f 2 | awk -F\" '{print $(NF-1)}'`
REC_TIME=`cat temp-rec-schedule.txt | grep "<ns3:mediapackage" | awk -F' ' '{print $2}' | cut -d '=' -f 2 | awk -F\" '{print $(NF-1)}'`
所以这一切仍然完美。上面代码的输出分别是(如果写入两个单独的文件):
MP输出:
b1706f0d-2cf1-4fd6-ab60-ae4d08608f1f
fd578fcc-342c-4f6c-986a-794ccb1abd0c
ce9f40e9-8e2c-4654-ba1c-7f79d35a69fd
c31a2354-6f4b-4bfe-b51e-2bac80889897
df342d88-c660-490e-9da6-9c91a7966536
49083f88-4264-4629-80fb-fae480d0bb25
946121c7-4948-4254-9cb5-2457e1b99685
f7bd0cad-e8f5-4e3d-a219-650d07a4bb34
REC_TIME输出:
2014-09-15T07:30:00Z
2014-09-19T08:58:00Z
2014-09-22T07:30:00Z
2014-10-13T07:30:00Z
2014-10-17T08:58:00Z
2014-10-20T07:30:00Z
2014-10-22T13:28:00Z
2014-10-27T07:30:00Z
我现在要做的是创建一个文件,其中来自line1
的{{1}}附加file1
来自line1
。即:
file2
等等。
我对Perl并不熟悉,但对Bash有所了解,所以如果有可能,我想在Bash中这样做。
此外,从这里开始,我想比较两个包含相同MP变量的文件,但是分配了两个不同的TIME值:从另一个中减去一个值,并计算两者之间经过的小时数。这是计算在我们的系统上发布视频和录制的开始时间之间经过的小时数。基本上是:
File1的输出: b1706f0d-2cf1-4fd6-ab60-ae4d08608f1f 2014-09-15T07:30:00Z
fd578fcc-342c-4f6c-986a-794ccb1abd0c 2014-09-19T08:58:00Z
File2的输出:b1706f0d-2cf1-4fd6-ab60-ae4d08608f1f 2014-09-15T07:30:00Z
我的脚本输出应该产生b1706f0d-2cf1-4fd6-ab60-ae4d08608f1f 2014-09-15T09:30:00Z
的值。
我怎样才能用Bash做到这一点?
答案 0 :(得分:2)
你可能最好只使用awk
来完成整个事情。类似的东西:
awk '/<ns3:medipacakge/{gsub("\"","");
split($3,mp,"=");
split($2,rt,"="); print mp[2],rt[2]}' temp-rec-schedule.txt
答案 1 :(得分:0)
第一个问题的答案是将输出写入两个不同的文件,然后使用paste
。
grep "<ns3:mediapackage" temp-rec-schedule.txt | awk -F' ' '{print $3}' | cut -d '=' -f 2 | awk -F\" '{print $(NF-1)}' > MP_out.txt
grep "<ns3:mediapackage" temp-rec-schedule.txt | awk -F' ' '{print $2}' | cut -d '=' -f 2 | awk -F\" '{print $(NF-1)}' > REC_out.txt
paste MP_out.txt REC_out.txt
话虽如此(正如@WilliamPursell在他对OP的评论中所说),从来没有理由将这一系列命令串在一起,因为awk可以用显着更少的开销和更大的灵活性。