Eu tenho uma lista com 250 linhas. Eu tenho que executar todos eles através de um servidor web para obter uma lista de saída. Esta lista, no entanto, retorna muito mais linhas do que estou interessado. Diga, meu list.txt
é:
a.1
b.1
etc
então a saída é output.txt
:
a.1 a b c
a.2 b a b
a.3 d k o
b.1 b o p
b.2 o i y
b.3 p i y
etc
É possível usar o comando grep para procurar todas as palavras em list.txt no output.txt e gerar a lista "desejado"? Preciso de toda a linha no meu output.txt. Sou novo em scripts, mas o que eu gostaria é de algo como
grep list.txt output.txt > wanted.txt
Não consegui encontrar nenhum exemplo disso
Respostas:
Eu ignoraria
grep
por este. É bom para expressões regulares, mas não parece que você realmente precise disso aqui.comm
pode comparar dois arquivos e mostrar interseções. Usando seus exemplos exatos:Isso é mais rápido do que qualquer grep, mas depende muito dos arquivos que estão sendo classificados. Se não estiverem, você pode pré-classificá-las, mas isso alterará a saída para que também seja classificada.
Como alternativa, esta resposta do iiSeymour permitirá que você faça isso
grep
. Os sinalizadores solicitam um arquivo de entrada e forçam uma pesquisa por palavra-chave de cadeia fixa. Isso não depende do pedido, mas será baseado nooutput.txt
pedido. Inverta os arquivos, se desejar, na ordem do list.txt.Se você
list.txt
é realmente grande, talvez seja necessário abordar isso um pouco mais de forma iterativa e passar cada linha para grep separadamente. Isso aumentará enormemente o tempo de processamento. No exemplo acima, você estaria lendooutput.txt
uma vez, mas desta forma você leria e processaria para cada linha list.txt. É horrível ... Mas pode ser sua única escolha. No lado positivo, ele classifica as coisas pelalist.txt
ordem.fonte
-1
suprime linhas exclusivas para o primeiro arquivo,-2
suprime linhas exclusivas para o segundo arquivo e-3
suprime linhas comuns para ambos. Para obter apenas as linhas comuns, suprimimos os únicos-12
.