Você considerou cmp
:
cmp -lb file[12]
5 70 8 71 9
22 65 5 66 6
alguém sabe o algoritmo que levaria 1 texto, segundo texto e daria instruções mínimas sobre como construir o segundo texto quando eu já conhecia o primeiro?
por exemplo. saída de "tempo de atividade":
16:18 up 1 day, 12:15, 4 users, load averages: 2.23 2.66 2.53
depois de um minuto:
16:19 up 1 day, 12:16, 4 users, load averages: 2.23 2.66 2.53
A única alteração é no tempo, neste caso.
A saída é aceitável em qualquer formato A amostra a seguir é apenas uma das ideias que tenho como criar informações que seriam usadas para criar a segunda linha a partir da primeira.
Exemplo de saída ao comparar a 1ª chamada de tempo de atividade com a 2ª:
4:1:9
21:1:6
4:1:9 (at position 4 - 1 character to removed, add "9")
21:1:6 (at position 21 - 1 character to removed, add "6")
Talvez eu possa usar apenas alguns comandos do git, mas estou procurando uma solução leve o mais possível, de preferência sem nenhuma dependência que possa ser executada em qualquer máquina que seja capaz de executar um script de shell.
Atualize para ter uma visão melhor do que estou tentando fazer com isso.
Esta solução de diff é necessária para salvar bytes. O agente Trafikito.com está em execução no servidor e está enviando a saída de alguns comandos como uptime
free -m
etc. para o terminal da API. Isso acontece uma vez por minuto e gera algum tráfego de saída para o servidor. Eu gostaria de reduzir essa pegada na rede enviando apenas um diff. Enquanto na maioria das vezes apenas alguns números em todas as saídas são alterados.
diff
- esta ferramenta compara linha por linha, o que não faz sentido para comandos como uptime
, onde a saída é apenas uma linha.
cmp
- esta ferramenta compara byte por byte, mas a saída do comando é grande. Se o byte for inserido no início da string, ele mostrará a diferença para todos os bytes seguintes. Poderia mostrar apenas mudar todo o resto e inserir uma nova coisa no lugar x.
Você considerou cmp
:
cmp -lb file[12]
5 70 8 71 9
22 65 5 66 6
$ diff -e uptime1 uptime2
1c
16:19 up 1 day, 12:16, 4 users, load averages: 2.23 2.66 2.53
.
diff -e
gera um script ed
, adequado para transformar o primeiro arquivo no segundo. Apenas adiciona, remove ou altera linhas completas.
Criando e aplicando o script:
$ diff -e uptime1 uptime2 >diff.ed
Mais tarde:
$ { cat diff.ed; echo ',p'; } | ed -s uptime1 >newfile
Isso transformaria o conteúdo de uptime1
no que estava em uptime2
. O echo ',p'
é obter ed
para gravar o arquivo resultante na saída padrão (isso é salvo em newfile
).
Como alternativa, qualquer um dos quatro tipos de saída de diff
(normal, unificado, contexto e ed) pode ser aplicado usando o utilitário patch
:
$ patch uptime1 <diff.ed
Hmm... Looks like an ed script to me...
Patching file uptime1 using Plan A...
Hmm... Ignoring the trailing garbage.
done
Consulte os manuais de diff
e patch
em seu sistema.
Tags linux file-comparison