同时读取两个文件并从中创建一个

时间:2014-09-09 17:27:29

标签: bash curl

我是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做到这一点?

2 个答案:

答案 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可以用显着更少的开销和更大的灵活性。