我在文本文件中有几行。每组包含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