首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在重复文件中打印一行,后面跟着一个特定的字符串?

如何在重复文件中打印一行,后面跟着一个特定的字符串?
EN

Ask Ubuntu用户
提问于 2016-05-31 16:44:54
回答 1查看 156关注 0票数 2

这是我的第一个问题,希望你能帮我。我已经研究了如何做到这一点,但还没有找到解决方案。

我有一个有上千次重复的文本文件,就像这个:

代码语言:javascript
复制
Query= AX-1  
[some lines without pattern]                                                             
A1
B2
C3
R7                                        

Query= AX-2 
[some lines without pattern]                                                                                                     
A1
F5  

Query= AX-3
[some lines without pattern]                                                                                                      
S9
T4
F5

我需要打印包含特定字符串的所有查询S。例如,如果我寻找F5,我应该得到:

代码语言:javascript
复制
AX-2
AX-3

而寻找A1时应该打印:

代码语言:javascript
复制
AX-1
AX-2

我认为这可以通过一个条件搜索来完成,它可以打印前面以"Query“开头的第一行。但做这件事的任何方法都会很棒。

EN

回答 1

Ask Ubuntu用户

回答已采纳

发布于 2016-05-31 17:06:36

在一个小python脚本中:

代码语言:javascript
复制
#!/usr/bin/env python3
import sys
s = sys.argv[1]; f = sys.argv[2]

currqu = ""
with open(f) as src:
    for l in src:
        if l.startswith("Query"):
            currqu = l.split()[-1].strip()
        if l.strip() == s:
            print(currqu)

使用

  1. 将脚本复制到一个空文件中,保存为quer.py
  2. 使用字符串(例如F5)和文本文件作为参数运行它: python3 /path/to/quer.py .to F5 /path/to/file.txt

如果路径包含空格,请在其周围使用引号。

因为它每一行读取,它应该是相当快的大(巨大)文件。

是如何工作的

  • 它通过行进行读取,寻找一行,从Query开始
  • 如果是这样的话,它会将值保存在“记住”行中,直到下一次出现“查询”为止。
  • 在查找所查找的字符串之间,如果发生查询,则打印"Query“的值,如果发生,则有效地”向后查看“。

编辑

正如评论中所要求的那样,一种查找

  • 一个命令中有多个匹配。

还有剧本

  • 消除重复。

它创建的输出如下:

代码语言:javascript
复制
$ '/home/jacob/Bureaublad/pscript_3.py' '/home/jacob/Bureaublad/look.txt' A1 F5
[A1]
AX-1
AX-2
[F5]
AX-2
AX-3

脚本

代码语言:javascript
复制
#!/usr/bin/env python3
import sys
strs = sys.argv[2:]; f = sys.argv[1]

for s in strs:
    print("["+s+"]")
    output = []; currqu = ""
    with open(f) as src:
        for l in src:
            if l.startswith("Query"):
                currqu = l.split()[-1].strip()
            if l.strip() == s:
                output.append(currqu)
        for item in sorted(set(output)):
            print(item)

如何使用

与第一个脚本几乎相同,但是现在,以文件作为参数,然后是字符串。原则上,您可以在一个命令中拥有任意多的字符串。

代码语言:javascript
复制
python3 /path/to/quer.py /path/to/file.txt F5 A1 B6 C7

等等

票数 0
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/779981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档