Salvando diffs em dois arquivos para adições modificadas e novas

1

Estou tentando comparar um novo arquivo (por exemplo, new.txt ) com um arquivo antigo (por exemplo, old.txt ) para ver o que foi adicionado no novo arquivo. Estou tentando adicionar as informações recém-adicionadas a um novo arquivo chamado newCourses.txt e as informações modificadas para modifiedCourses.txt . Se isso não for possível com um diff, quais são as alternativas sem instalar um pacote ou software?

old.txt

2016 2BUSI 4850 K002 BUSINESS MW 02:10P-09:30P
2016 2BUSI 4840 K002 PRESPECH MW 07:10P-09:30P
2016 2BUSI 4820 K002 SCHLOFSC MW 07:10P-09:30P
2016 2BUSI 4870 K002 HISTORYZ MW 04:10P-09:30P

new.txt

2016 2BUSI 4850 K002 BUSINESS MW 07:10P-09:30P
2016 2BUSI 4840 K002 PRESPECH MW 07:10P-09:30P
2016 2BUSI 4820 K002 SCHLOFSC MF 07:10P-09:30P
2016 2BUSI 4870 K002 HISTORYZ MW 06:10P-09:30P
2017 4NONE 2938 K112 RECREATI TS 11:10P-11:55P

A saída quando eu faço diff old.txt new.txt :

1c1
< 2016 2BUSI 4850 K002 BUSINESS MW 02:10P-09:30P
---
> 2016 2BUSI 4850 K002 BUSINESS MW 07:10P-09:30P
3,4c3,5
< 2016 2BUSI 4820 K002 SCHLOFSC MW 07:10P-09:30P
< 2016 2BUSI 4870 K002 HISTORYZ MW 04:10P-09:30P
\ No newline at end of file
---
> 2016 2BUSI 4820 K002 SCHLOFSC TF 07:10P-09:30P
> 2016 2BUSI 4870 K002 HISTORYZ MW 06:10P-09:30P
> 2017 4NONE 2938 K112 RECREATI TS 11:10P-11:55P
\ No newline at end of file

Como posso enviá-lo para dois arquivos diferentes, como newCourses.txt conteria

2017 4NONE 2938 K112 RECREATI TS 11:10P-11:55P

e modifiedCourses.txt conteriam

2016 2BUSI 4850 K002 BUSINESS MW 07:10P-09:30P
2016 2BUSI 4820 K002 SCHLOFSC TF 07:10P-09:30P
2016 2BUSI 4870 K002 HISTORYZ MW 06:10P-09:30P
    
por Daniel Plas Rivera 06.02.2017 / 20:38

1 resposta

1

Você pode usar awk :

awk 'NR==FNR{ z[$5]=$0; next}{ if ($5 in z){ if ($0!=z[$5]){
print >"modifiedCourses.txt"}} else { print >"newCourses.txt"}}' old.txt new.txt

Isto lê old.txt e salva as linhas em uma matriz (os índices são os nomes dos cursos) e então lê new.txt e para cada curso verifica se é um índice da matriz: se for, verifica se a linha foi alterada e, se for o caso, imprime em modifiedCourses.txt ; se não for um índice, imprime a linha em newCourses.txt
Você pode alterar $0 para $7 se a única alteração que importa são as horas.

    
por 06.02.2017 / 21:36