por que não simplesmente substituir B?
grep '1' A > B
sleep 60
while true; do
grep '1' A > C
grep -v -F -x -f B C > D
cat C >> B ####
sleep 60
done &
Dessa forma, D
só obterá os últimos 60 segundos de 1 em A
.
Digamos que eu tenha um arquivo de origem chamado A com muitas strings de 1 e 2, e cujo conteúdo está sendo modificado e alterado automaticamente (novas strings de 1 e 2 são adicionadas), e que eu executo um grep em este arquivo para extrair '1' strings em outro arquivo chamado B.
grep '1' A > B
Agora, as próximas operações do grep não devem apenas fazer um grep em B, mas também comparar B e A para extrair novas strings (e apenas novas strings) em outro arquivo. Isso deve ser feito repetidamente. Para isso eu crio um novo arquivo C que contém as strings '1' do conteúdo atualizado de A, compare com B e extraia a diferença em um novo arquivo chamado D:
grep '1' A > B
sleep 60
while true; do
grep '1' A > C
grep -v -F -x -f B C > D
sleep 60
done &
O problema é que ele não funcionará corretamente, já que B é um grep antigo de A, então a próxima vez que ele for executado, C será comparado apenas a este B antigo que não está sendo atualizado. Além disso, D está sendo sobregravado a cada vez.
Eu preciso ser capaz de instruir o script para cada vez que manter uma cópia do último B, então A é sempre comparado com sua versão anterior, e C sempre mostra a diferença entre o atual A e o anterior, o último B. don Não preciso manter versões anteriores de C enquanto as copio em outro lugar.
Eu percebi que tinha que usar nomes de arquivos variáveis e tentei adicionar uma variável $ (data) nos nomes de arquivos B e C, mas obviamente não funciona, pois o grep não os reconhece (como a data muda entre cada execução do script).
PS: Encontrei uma solução limpando o conteúdo de A entre cada execução, para que apenas o novo conteúdo seja levado em consideração, o que elimina a necessidade de usar nomes de variáveis e a segunda operação do grep. Eu ainda gostaria de aprender como chamar nomes de arquivos variáveis em scripts bash.
PS2: Estou escrevendo no meu telefone, então não sei como codificar corretamente o script bash.
por que não simplesmente substituir B?
grep '1' A > B
sleep 60
while true; do
grep '1' A > C
grep -v -F -x -f B C > D
cat C >> B ####
sleep 60
done &
Dessa forma, D
só obterá os últimos 60 segundos de 1 em A
.