Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 解析日志文件可以收集值_Bash - Fatal编程技术网

Bash 解析日志文件可以收集值

Bash 解析日志文件可以收集值,bash,Bash,我想扫描一个较长的打印输出,并获取打印输出的值 在开始和结束之间,如果值不可用,则输入“NA”。 示例文件如下 我想在Bash Cygwin中这样做 logfile.txt: START label1 label2 label3 valueA valueB valueC label4 label5 valueD valueE label6 valueF END START label1 label3 valueG valueH label6 valueI END START

我想扫描一个较长的打印输出,并获取打印输出的值 在开始和结束之间,如果值不可用,则输入“NA”。 示例文件如下

我想在Bash Cygwin中这样做

logfile.txt:

START

label1 label2 label3
valueA valueB valueC

label4 label5
valueD valueE

label6
valueF

END

START

label1 label3
valueG valueH

label6
valueI

END

START

label1
valueJ

label6
valueK

END
下面是想要的output.txt

valueA valueB valueC valueD valueE valueF
valueG NA     valueH NA     NA     valueI
valueJ NA     NA     NA     NA     valueK

请尝试下面的
awk
并告诉我这是否对您有帮助(使用GNU
awk
测试)

awk'
/开始/{flag=1}
/结束/{
num=拆分(val_标签,标签“”);
数字=标签[num];
子(/[a-zA-Z]+/,“”,数字);
拆分(val_值,值“”);

对于(i=1;i如果您对python代码感兴趣:

with open("testfile.txt","r") as tt, open("output.txt","w") as op:
    lnums = []
    values =[]
    for ll in tt:
        if(ll.split()):

            if(ll.split()[0]=="START"):
                lnums = []
                values =[]

            elif(ll.split()[0]=="END"):
                max = lnums[-1]
                j=0
                for i in range(max):
                    if(lnums[j]==i+1):
                        op.write(values[j]+" ")
                        j=j+1
                    else:
                        op.write("NA ")
                op.write("\n")

            else:
                if("label" in ll):
                    labels = ll.split()
                    lnums = lnums + [int(x[5:]) for x in labels] #extract number from label

                elif("value" in ll):
                    values = values + ll.split()

欢迎使用Stack Overflow!抱歉,这不是Stack Overflow的工作方式。“我想做X,请给我提示和/或示例代码”表格中的问题被认为是离题的。请访问并阅读,尤其是阅读Hi Kvantour,我对Bash脚本还不熟悉,但有一些知识,所以如果有人能指导我,我会自己做。我需要使用什么的想法。@pawana,没有问题,我们都在这里学习。你可以在这里学习,并通过分享知识让其他人也学习。我有给出一个解决方案,你能试试下面的,让我知道这是否对你有帮助吗?你好Ravinder,它的工作很好!谢谢你的指导/pawana@pawana,很高兴它帮助了您,再次查看此链接如果有人回答了您的问题,我们应该怎么做。干杯,快乐学习:)
with open("testfile.txt","r") as tt, open("output.txt","w") as op:
    lnums = []
    values =[]
    for ll in tt:
        if(ll.split()):

            if(ll.split()[0]=="START"):
                lnums = []
                values =[]

            elif(ll.split()[0]=="END"):
                max = lnums[-1]
                j=0
                for i in range(max):
                    if(lnums[j]==i+1):
                        op.write(values[j]+" ")
                        j=j+1
                    else:
                        op.write("NA ")
                op.write("\n")

            else:
                if("label" in ll):
                    labels = ll.split()
                    lnums = lnums + [int(x[5:]) for x in labels] #extract number from label

                elif("value" in ll):
                    values = values + ll.split()