У меня есть этот скрипт ниже
#!/bin/bash
function labels2 () {
awk '
/[0-9]/{
print substr($3,length($3)-11), $3
}' $@ | /bin/sort -u | awk '{print "BUILD: " NR, $2}'
}
function labels () {
awk '
/[0-9]/{
BL[$3] = substr($3,length($3)-11)
}
END {
asort(BL)
for (i in BL) {
print i, BL[i]
}
}' $@
}
labels $@
for a in $@
do
labels $@ | gawk '
/BUILD:/ {
BUILD[$2] = $3
BUILDCNT ++
next
}
/[0-9]/ {
DATEd[$3] = $1
TIMEd[$3] = $2
MODULESd[$3] = $4
CASESd[$3] = $5
FAILEDd[$3] = $6
COVERd[$3] = $7
LOCd[$3] = $8
}
END {
SUBSYSTEM=substr(FILENAME, 1, length(FILENAME)-7)
LABEL= "\"" toupper(SUBSYSTEM) "\""
print "#{"
print "\"buildnames\": {"
print " \"label\": \"buildnames\","
print " \"data\": ["
print " ]"
print " }"
print "};"
print "#{"
print "\"subsystem\": " LABEL ","
print " \"date\": {"
print " \"label\": " LABEL ","
print " \"data\": ["
for (i = 0 ; i <= BUILDCNT; i ++ ) {
B=BUILD[i]
if (DATEd[B]) { print " [" i ", \"" DATEd[B] "\"],"}
}
print " ]"
print " },"
print " \"time\" : {"
print " \"label\": " LABEL ","
print " \"data\": ["
for (i = 0 ; i <= BUILDCNT; i ++ ) {
B=BUILD[i]
if (TIMEd[B]) { print " [" i ", \"" TIMEd[B] "\"],"}
}
print " ]"
print " },"
print " \"modules\" : {"
print " \"label\": " LABEL ","
print " \"data\": ["
for (i = 0 ; i <= BUILDCNT; i ++ ) {
B=BUILD[i]
if (MODULESd[B]) { print " [" i ", \"" MODULESd[B] "\"],"}
}
print " ]"
print " },"
print " \"cases\" : {"
print " \"label\": " LABEL ","
print " \"data\": ["
for (i = 0 ; i <= BUILDCNT; i ++ ) {
B=BUILD[i]
if (MODULESd[B]) { print " [" i ", \"" MODULESd[B] "\"],"}
}
print " ]"
print " },"
print " \"failed\" : {"
print " \"label\": " LABEL ","
print " \"data\": ["
for (i = 0 ; i <= BUILDCNT; i ++ ) {
B=BUILD[i]
if (FAILEDd[B]) { print " [" i ", \"" FAILEDd[B] "\"],"}
}
print " ]"
print " },"
print " \"cover\" : {"
print " \"label\": " LABEL ","
print " \"data\": ["
for (i = 0 ; i <= BUILDCNT; i ++ ) {
B=BUILD[i]
if (COVERd[B]) { print " [" i ", \"" COVERd[B] "\"],"}
}
print " ]"
print " },"
print " \"loc\" : {"
print " \"label\": " LABEL ","
print " \"data\": ["
for (i = 0 ; i <= BUILDCNT; i ++ ) {
B=BUILD[i]
if (LOCd[B]) { print " [" i ", \"" LOCd[B] "\"],"}
}
print " ]"
print " }"
print " };"
}
' - $a
done
И это дает следующий вывод при "подаче" с текущим текстовым файлом gps.txt
2011-01-22 22:12 P16A22_110114072915 22 1312 75 13.55 1399
_
1 110114072915
#{
"buildnames": {
"label": "buildnames",
"data": [
]
}
};
#{
"subsystem": "GPS",
"date": {
"label": "GPS",
"data": [
[0, "1"],
]
},
"time" : {
"label": "GPS",
"data": [
[0, "110114072915"],
]
},
"modules" : {
"label": "GPS",
"data": [
]
},
"cases" : {
"label": "GPS",
"data": [
]
},
"failed" : {
"label": "GPS",
"data": [
]
},
"cover" : {
"label": "GPS",
"data": [
]
},
"loc" : {
"label": "GPS",
"data": [
]
}
};
Как я хочу выглядеть, это
#{
"buildnames": {
"label": "buildnames",
"data": [[0,"BUILD: 1 P16A22_110114072915"]
]
}
};
#{
"subsystem": "GPS",
"date": {
"label": "GPS",
"data": [
[0, "2011-01-22"],
]
},
"time" : {
"label": "GPS",
"data": [
[0, "22:12"],
]
},
"modules" : {
"label": "GPS",
"data": [[0,22]
]
},
"cases" : {
"label": "GPS",
"data": [[0,1312]
]
},
"failed" : {
"label": "GPS",
"data": [[0,75]
]
},
"cover" : {
"label": "GPS",
"data": [[0,13.55]
]
},
"loc" : {
"label": "GPS",
"data": [[0,1399]
]
}
};
Итак, чтобы разбить эту проблему на подзадачи
Почему строка 1 110114072915
вверху и как ее удалить?
Как я могу использовать функцию labels2()
, чтобы выход из нее (BUILD: 1 P16A22_110114072915)
получал buildnames
вот так
"buildnames": {
"label": "buildnames",
"data": [[0,"**BUILD: 1 P16A22_110114072915**"]
]
}
Это последний вопрос: почему бы не сработать MODULESd[$3] = $4
, CASESd[$3] = $5
и т. Д. ... когда я перебираю его и распечатываю, он становится ничем.
Обратите внимание здесь, что текстовый файл gps.txt
будет непрерывно расширяться, так что в будущем это может быть 50 строк, и было бы хорошо, если бы решение все еще работало =)
Я знаю, что это стало большим количеством текста, и я прошу прощения за это, и я, возможно, не получу ответы на все мои вопросы, но если бы у вас была идея, как получить любой из тех, я был бы более чем счастлив, потому что я Я застрял и не знаю, как делать то, что я хочу. И, к сожалению, этот способ - мой единственный вариант.
Спасибо вам за ваши усилия =)