如何在bash脚本中解析文件中的行集的行

时间:2019-06-06 01:48:36

标签: linux bash

我在文本文件中有几行。每组包含4行,分别描述单个文件中的Id,attemptID,SparkUser,starttimeEpoch和tryID。我想解析并将每四行分配给单个镜头上的四个变量,然后转到下一组内容。我有一个下面的脚本,但是它没有按预期工作。

我使用了while循环,该循环读取每一行并grep一个字符串,并将变量分配给CURL命令(对spark的API调用)。在curl命令中,我具有两个变量,这些变量只能在两条连续的行中读取。如果我使用While循环,则它可能一次只能分配一个变量,而CURL命令期望为其分配两个变量,因此CURL在这里失败。

while read line
do
attempt_id=`echo $line | grep -w attemptId | awk '{print $6}' | cut -d'"' -f2`
id=`echo $line| grep id | awk '{print $3}' | cut -d'"' -f2`
user=`echo $line | grep "sparkUser" | awk '{print $6}' | cut -d'"' -f2`
start_time=`echo $line |  grep "startTimeEpoch" | awk '{print $9}' | cut -d'"' -f2 | cut -d',' -f1 | cut -c 1-10`

if [[ ! -z "$attempt_id" ]]
then
id=`echo $line| grep id | awk '{print $3}' | cut -d'"' -f2`
user=`echo $line | grep "sparkUser" | awk '{print $6}' | cut -d'"' -f2`
# the below variables would convert Epoch Milliseconds into Human readable time format:
#
start_time=`echo $line |  grep "startTimeEpoch" | awk '{print $9}' | cut -d'"' -f2 | cut -d',' -f1 | cut -c 1-10`
 time=`date -d @$start_time`
 a=`curl -k  -u $USERNAME:$PASS -H "Accept: application/json" -X GET -s -k http://XXXXXXXXXX:18080/history/$id/$attempt_id/environment/ |  xargs | grep -Po "<tr>\K(.*?)</tr>" | sed "s/..tr.//g" | grep spark.submit.deployMode | grep -ic client`


done < wi

示例文件:

    "attemptId" : "1",
    "sparkUser" : "XXXXX",
    "startTimeEpoch" : 1559782915432
  "id" : "application_1558744311646_179708",
    "attemptId" : "1",
    "sparkUser" : "yyyyy",
    "startTimeEpoch" : 1559782769130

0 个答案:

没有答案