Em um pequeno script 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)
Para usar
- Copie o script em um arquivo vazio, salve-o como
quer.py
-
execute-o com a string (por exemplo, F5) e o arquivo de texto como argumentos:
python3 /path/to/quer.py F5 /path/to/file.txt
Se o caminho contiver espaços, use aspas em torno dele.
Como ele lê por linha, deve ser bem rápido em arquivos grandes (grandes).
Como funciona
- ele lê as linhas, procurando por uma linha, começando com
Query
- se assim for, manterá o valor na linha "em mente", até a próxima ocorrência de "Consulta"
- entre procura sua string procurada, imprime o valor de "Consulta" se ocorrer, efetivamente procurando "para trás" em caso afirmativo.
EDITAR
Conforme solicitado em um comentário, uma versão que procura
- várias correspondências em um comando.
e o script
- elimina duplicados .
Cria uma saída como:
$ '/home/jacob/Bureaublad/pscript_3.py' '/home/jacob/Bureaublad/look.txt' A1 F5
[A1]
AX-1
AX-2
[F5]
AX-2
AX-3
O script
#!/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)
Como usar
Quase o mesmo que o primeiro script, mas agora, inicie com o arquivo como argumento e, em seguida, as seqüências de caracteres. Em princípio, você pode ter quantas strings desejar em um comando.
python3 /path/to/quer.py /path/to/file.txt F5 A1 B6 C7
etc, etc.