需要优秀bash程序员的帮助吗
我在下面有这个脚本需要优秀bash程序员的帮助吗,bash,awk,Bash,Awk,我在下面有这个脚本 #!/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)
#!/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
我想要的是这个样子
#{
"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]
]
}
};
所以把这些问题分解成子问题
110114072915
在顶部,我如何删除它labels2()
,以便它的输出(BUILD:1 P16A22_110114072915)
像这样进入buildnames
"buildnames": {
"label": "buildnames",
"data": [[0,"**BUILD: 1 P16A22_110114072915**"]
]
}
modules[$3]=$4
,CASESd[$3]=$5
等等,为什么不这样做呢。。。当我循环通过它并打印出来时,它就什么都没有了gps.txt
将不断扩展,因此将来可能会有50行,如果解决方案仍然有效,那就好了=)
我知道这变成了一大堆文字,对此我深表歉意,我可能无法回答我所有的问题,但如果你知道如何回答这些问题,我会非常高兴,因为我现在陷入困境,不知道如何做我想做的事。不幸的是,这样做是我唯一的选择
谢谢你的努力=)这都是基于心理处理的——我还没有实际运行这些命令。查看该文本文件的示例会有所帮助 1) 为什么第110114072915行位于顶部,如何删除它 它看起来像是循环打印信息之前的裸
labels$@
调用。把它扔掉
2) 您可能应该将该逻辑迁移到底部的awk命令中。关联数组赋值可以在第二个块/[0-9]/
中完成,END
逻辑可以直接放在大脚本的END
块中
3) 文本文件每行有8个字段吗?作为调试,使用类似于“/dev/stderr”的
print NF>”编码>以确保在设置变量时确实有8个字段。这都是基于心理处理的——我还没有实际运行这些命令。查看该文本文件的示例会有所帮助
1) 为什么第110114072915行位于顶部,如何删除它
它看起来像是循环打印信息之前的裸labels$@
调用。把它扔掉
2) 您可能应该将该逻辑迁移到底部的awk命令中。关联数组赋值可以在第二个块/[0-9]/
中完成,END
逻辑可以直接放在大脚本的END
块中
3) 文本文件每行有8个字段吗?作为调试,使用类似于“/dev/stderr”的print NF>”
以确保在设置变量时确实有8个字段
1) 为什么第110114072915行位于顶部,如何删除它
福巴正确地回答了这个问题
这在我看来是错误的:
for a in $@
do
labels $@ | gawk '
为什么要在所有参数上循环,然后运行labels$@
而不是labels$a
2) 如何使用函数labels2()
我将运行函数并将输出分配给awk变量:
labels $@ | gawk -v "bnames=\"$(labels $a)\"" '
然后在awk脚本中使用该变量:
print " \"data\": [", bnames
3) 这是最后一个问题:为什么这不起作用
我不知道,但除非你把问题分解成更小的部分并自己调试,否则你永远也无法解决它。如果你写了一个100行的awk脚本,但它不起作用,那么答案是试着用一个更简单的10行版本来工作,然后一块一块地增加它,并检查每个部分的工作情况
1) 为什么第110114072915行位于顶部,如何删除它
福巴正确地回答了这个问题
这在我看来是错误的:
for a in $@
do
labels $@ | gawk '
为什么要在所有参数上循环,然后运行labels$@
而不是labels$a
2) 如何使用函数labels2()
我将运行函数并将输出分配给awk变量:
labels $@ | gawk -v "bnames=\"$(labels $a)\"" '
然后在awk脚本中使用该变量:
print " \"data\": [", bnames
3) 这是最后一个问题:为什么这不起作用
我不知道,但除非你把问题分解成更小的部分并自己调试,否则你永远也无法解决它。如果你写了一个100行的awk脚本,但它不起作用,那么答案是试着用一个更简单的10行版本来工作,然后一块一块地增加它,并检查每个部分的工作情况 我几乎不知道你在问什么。我正在尝试使用bash脚本将结构“Date Time Build Module cases failed cover loc”上的文本文件转换为JSON,但是遇到了麻烦这是一个非常具体的问题,因为有这么多的文本,而且几乎没有关于gps.txt
的知识,所以很难判断这里出了什么问题。我建议你把这个程序分成几个部分,看看你的各个功能是否正常工作。这是一个很长的调试过程,您必须自己完成。:)感谢您提供的提示,我们将把它分解为子问题=)您需要向我们展示如何捕获输出。向我们展示如何调用脚本。这很重要,因为您的“垃圾”可能在STDERR上,而不是STDOUT上。您是否尝试过您的_script.sh/dev/null
?我几乎不知道您在问什么。我正在尝试使用bash脚本将结构“Date Time Build Module cases failed cover loc”上的文本文件转换为JSON,但是遇到了麻烦这是一个非常具体的问题,因为有这么多的文本,而且几乎没有关于gps.txt
的知识,所以很难判断这里出了什么问题。我建议你把这个程序分成几个部分,看看你的各个功能是否正常工作。这是一个很长的调试过程,您必须自己完成。:)感谢您提供的提示,我们将把它分解为子问题=)您需要向我们展示如何捕获输出。让我们看看你是怎么做的