Como usar comm para corresponder arquivos de log com os mesmos elementos, mas timestamps diferentes?

0

Eu sou novo em programação, por favor, tenha paciência comigo. Estou tentando usar o comando comm para comparar dois logs para ver quais aplicativos foram instalados, mas não removidos. Eu não quero usar o awk para isso, se possível. Aqui e exemplo dos arquivos:

Instalado:

2009-03-21 11:43:21 install flex-old:amd54 <none> 3.7.4a-10ubuntu1
2009-03-22 22:55:08 install libubsan0:amd54 <none> 6.3.0-1ubuntu1~14.04

Removido:

2009-03-24 19:53:49 remove libubsan0:amd54 <none> 6.3.0-1ubuntu1~14.04

Então, o que precisaria ser encontrado como diferente é a linha "flex-old". Aqui está o que eu tentei, com algumas outras variações:

comm -23 <(sort install.txt) <(sort removed.txt) > difference.txt

Isso gera todas as listas instaladas, não apenas aquelas que não estão em comum com a lista de remoção. Eu também tentei:

comm -3 <(cut -d " " -4f sort install.txt | uniq) <(sort removed.txt | uniq) > what.txt

Mas, isso gera todos os aplicativos de ambos, mas com o removido diretamente sob a instalação. Qualquer ajuda é apreciada:)

    
por rrfeva 18.02.2018 / 06:13

1 resposta

1

Parece que você estava bem perto de mim. Baseado em suas amostras, o seguinte 1 forro:

comm -23 <(sort install.txt | cut -d" " -f4) <(sort removed.txt | cut -d" " -f4)

Produzi isso para saída para mim:

flex-old:amd54

NOTA: Você pode querer ajustar o comm -23 . Por exemplo, comm -3 pode ser tudo o que você precisa aqui.

O que eu fiz para testar. Primeiro, eu quebrei seus comandos para testá-los. Eu comecei com:

cut -d " " -4f sort install.txt

Qual foi claramente quebrado, então eu corrigi isso para:

sort install.txt | cut -d" " -f4

Depois disso (com base na minha experiência), fui capaz de reescrever o seu one liner sem mais testes. Se isso falhar, eu teria realizado um teste básico com comm para ver o que estava errado, mas não houve necessidade dessa vez:]

    
por 18.02.2018 / 06:29

Tags