这是我的第一个问题,希望你能帮我。我已经研究了如何做到这一点,但还没有找到解决方案。
我有一个有上千次重复的文本文件,就像这个:
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,我应该得到:
AX-2
AX-3而寻找A1时应该打印:
AX-1
AX-2我认为这可以通过一个条件搜索来完成,它可以打印前面以"Query“开头的第一行。但做这件事的任何方法都会很棒。
发布于 2016-05-31 17:06:36
在一个小python脚本中:
#!/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)quer.py如果路径包含空格,请在其周围使用引号。
因为它每一行读取,它应该是相当快的大(巨大)文件。
Query开始正如评论中所要求的那样,一种查找
还有剧本
它创建的输出如下:
$ '/home/jacob/Bureaublad/pscript_3.py' '/home/jacob/Bureaublad/look.txt' A1 F5
[A1]
AX-1
AX-2
[F5]
AX-2
AX-3#!/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)与第一个脚本几乎相同,但是现在,以文件作为参数,然后是字符串。原则上,您可以在一个命令中拥有任意多的字符串。
python3 /path/to/quer.py /path/to/file.txt F5 A1 B6 C7等等
https://askubuntu.com/questions/779981
复制相似问题