使用bash/python解析文本

使用bash/python解析文本,python,bash,parsing,Python,Bash,Parsing,我从FlexLM(lmstat-a)获得以下输出: 我想得到一个输出,使用 jfall feature1 17731 jfall feature1 29438 jfall feature1 12791 jfall feature2 127 我更喜欢使用bash和/或Python。请注意,此输出可以随时更改,有些用户可以查看feature1或feature2。这就是为什么我很难找到要解析的模式 谢谢你的帮助 当前状态: $USER="jfall" $LOGFILE="mylog.log" HAN

我从FlexLM(lmstat-a)获得以下输出:

我想得到一个输出,使用

jfall feature1 17731
jfall feature1 29438
jfall feature1 12791
jfall feature2 127
我更喜欢使用bash和/或Python。请注意,此输出可以随时更改,有些用户可以查看feature1或feature2。这就是为什么我很难找到要解析的模式

谢谢你的帮助

当前状态:

$USER="jfall"
$LOGFILE="mylog.log"
HANDLE=(`cat $LOGFILE | grep $USER | awk '{print $6}' | tr -d '),'`)
HANDLE_LENGHT=${#HANDLE[@]}
for ((i=0; i<${HANDLE_LENGHT};i++))
    do
            echo "$USER ${HANDLE[$i]}"
    done

但我不知道如何才能获得为每行分配的特征列表。我的第一个想法是在每个结果上方返回以“”开头的模式,但我不确定如何实现它,所以您需要做的是根据您看到的共性将其分解

我看到有一行指定了…的
用户,下一行的内容是用引号括起来的功能名称:

#string = the example you gave
import re
sections = [x.strip() for x in re.split(r'Users of.*',string) if x != '']
其余的将在一个循环中完成。假设其余部分位于节中节的

现在我们需要获得每个部分的标题:

title = section.split('\n')[0].split('"')[1]
#get first line, get everything between first quotation marks
现在,您需要分析每一行以获取所需的名称和数字:

for line in section.split('/n'):
    t = re.match(r'(.*?)\s.*?\(flex1.com/\d+? (\d+)?\)',line)
您最不希望返回的是仅返回特定的起始名称:

the_name = "jfall"
if t != None:
    final = [x[0] + " " + title + " " + x[1] for x in t.groups() if x[0] == the_name]
让我们将所有结果保存在名为
result

result += final
完全编译的循环: 现在我运行了这个,这是它打印的内容:

>>> for i in result:
...     print i
... 
jfall feature1 17731
jfall feature1 29438
jfall feature1 12791
jfall feature2 127

如果有任何不清楚的地方,请告诉我

好吧,那么你需要做的就是根据你所看到的共同点将它分开

我看到有一行指定了…
用户,下一行的内容是用引号括起来的功能名称:

#string = the example you gave
import re
sections = [x.strip() for x in re.split(r'Users of.*',string) if x != '']
其余的将在一个循环中完成。假设其余部分位于节中节的

现在我们需要获得每个部分的标题:

title = section.split('\n')[0].split('"')[1]
#get first line, get everything between first quotation marks
现在,您需要分析每一行以获取所需的名称和数字:

for line in section.split('/n'):
    t = re.match(r'(.*?)\s.*?\(flex1.com/\d+? (\d+)?\)',line)
您最不希望返回的是仅返回特定的起始名称:

the_name = "jfall"
if t != None:
    final = [x[0] + " " + title + " " + x[1] for x in t.groups() if x[0] == the_name]
让我们将所有结果保存在名为
result

result += final
完全编译的循环: 现在我运行了这个,这是它打印的内容:

>>> for i in result:
...     print i
... 
jfall feature1 17731
jfall feature1 29438
jfall feature1 12791
jfall feature2 127

如果有任何不清楚的地方,请告诉我

好吧,那么你需要做的就是根据你所看到的共同点将它分开

我看到有一行指定了…
用户,下一行的内容是用引号括起来的功能名称:

#string = the example you gave
import re
sections = [x.strip() for x in re.split(r'Users of.*',string) if x != '']
其余的将在一个循环中完成。假设其余部分位于节中节的

现在我们需要获得每个部分的标题:

title = section.split('\n')[0].split('"')[1]
#get first line, get everything between first quotation marks
现在,您需要分析每一行以获取所需的名称和数字:

for line in section.split('/n'):
    t = re.match(r'(.*?)\s.*?\(flex1.com/\d+? (\d+)?\)',line)
您最不希望返回的是仅返回特定的起始名称:

the_name = "jfall"
if t != None:
    final = [x[0] + " " + title + " " + x[1] for x in t.groups() if x[0] == the_name]
让我们将所有结果保存在名为
result

result += final
完全编译的循环: 现在我运行了这个,这是它打印的内容:

>>> for i in result:
...     print i
... 
jfall feature1 17731
jfall feature1 29438
jfall feature1 12791
jfall feature2 127

如果有任何不清楚的地方,请告诉我

好吧,那么你需要做的就是根据你所看到的共同点将它分开

我看到有一行指定了…
用户,下一行的内容是用引号括起来的功能名称:

#string = the example you gave
import re
sections = [x.strip() for x in re.split(r'Users of.*',string) if x != '']
其余的将在一个循环中完成。假设其余部分位于节中节的

现在我们需要获得每个部分的标题:

title = section.split('\n')[0].split('"')[1]
#get first line, get everything between first quotation marks
现在,您需要分析每一行以获取所需的名称和数字:

for line in section.split('/n'):
    t = re.match(r'(.*?)\s.*?\(flex1.com/\d+? (\d+)?\)',line)
您最不希望返回的是仅返回特定的起始名称:

the_name = "jfall"
if t != None:
    final = [x[0] + " " + title + " " + x[1] for x in t.groups() if x[0] == the_name]
让我们将所有结果保存在名为
result

result += final
完全编译的循环: 现在我运行了这个,这是它打印的内容:

>>> for i in result:
...     print i
... 
jfall feature1 17731
jfall feature1 29438
jfall feature1 12791
jfall feature2 127


如果有任何不清楚的地方,请告诉我

看起来你需要一些代码。。如果你在这方面做出一些努力,我们很乐意帮助你。如果你在尝试中遇到困难,我们会帮助你的!我更多的是寻找一个想法,而不是一个例子。正如我所说的,我已经解析了用户名/句柄号,但是我不确定如何获得分配给每一行的特性。无论如何,我已经更新了我的主要问题:)看起来你需要一些代码。。如果你在这方面做出一些努力,我们很乐意帮助你。如果你在尝试中遇到困难,我们会帮助你的!我更多的是寻找一个想法,而不是一个例子。正如我所说的,我已经解析了用户名/句柄号,但是我不确定如何获得分配给每一行的特性。无论如何,我已经更新了我的主要问题:)看起来你需要一些代码。。如果你在这方面做出一些努力,我们很乐意帮助你。如果你在尝试中遇到困难,我们会帮助你的!我更多的是寻找一个想法,而不是一个例子。正如我所说的,我已经解析了用户名/句柄号,但是我不确定如何获得分配给每一行的特性。无论如何,我已经更新了我的主要问题:)看起来你需要一些代码。。如果你在这方面做出一些努力,我们很乐意帮助你。如果你在尝试中遇到困难,我们会帮助你的!我更多的是寻找一个想法,而不是一个例子。正如我所说的,我已经解析了用户名/句柄号,但是我不确定如何获得分配给每一行的特性。无论如何,我已经更新了我的主要问题:)谢谢!我宁愿先使用bash,所以我将遵循您的指南,将您的代码改编为bash!是的,我不熟悉bash,但概念是一样的。采取你所知道的将是一致的,并应用正则表达式和基于一致性的搜索来抓住不一致!一些更新:我最终放弃了使用Bash来做这件事:)我不得不调整您的代码,使其与我的环境一起工作,但您的帮助非常感谢,您的示例帮助我了解了PythonThanks的一些基本技巧!我宁愿先使用bash,所以我将遵循您的指南,将您的代码改编为bash!是的,我不熟悉bash,但概念是一样的。采取你所知道的将是一致的,并应用正则表达式和基于一致性的搜索来抓住不一致!一些更新:我最终放弃了使用Bash来实现这一点:)我不得不调整您的代码,使其与我的环境兼容,但是您的