SHOW:
|
|
- or go back to the newest paste.
| 1 | #!/bin/bash | |
| 2 | ||
| 3 | - | convUtf="/tmp/convUtf.txt" |
| 3 | + | |
| 4 | usadoUnix="/tmp/usadoUnix.txt" | |
| 5 | resultado="/home/$USER/diferenca.txt" | |
| 6 | ||
| 7 | # Converte a codificação do arquivo | |
| 8 | - | # Remove os Carriage Returns usado pelo windows. |
| 8 | + | iconv --from-code=utf-16le --to-code=UTF-8 "$1" -o $padraoUnix |
| 9 | - | iconv --from-code=utf-16le --to-code=UTF-8 "$1" -o $convUtf |
| 9 | + | iconv --from-code=utf-16le --to-code=UTF-8 "$2" -o $usadoUnix |
| 10 | - | tr -d \\r < $convUtf > $padraoUnix |
| 10 | + | |
| 11 | # Remove os Carriage-Returns usado pelo windows. | |
| 12 | - | rm $convUtf |
| 12 | + | sed -i "s/\r//g" $padraoUnix |
| 13 | - | iconv --from-code=utf-16le --to-code=UTF-8 "$2" -o $convUtf |
| 13 | + | |
| 14 | - | tr -d \\r < $convUtf > $usadoUnix |
| 14 | + | |
| 15 | sed -i "s/\r//g" $usadoUnix | |
| 16 | - | rm $convUtf |
| 16 | + | |
| 17 | ||
| 18 | - | # Retira as linhas em branco repetidas para reduzir o tamanho |
| 18 | + | # Remove a linha problemática dos dois arquivos. |
| 19 | - | # final do arquivo. |
| 19 | + | sed -i "/Windows Registry Editor Version 5\.00/d" $padraoUnix |
| 20 | sed -i "/Windows Registry Editor Version 5\.00/d" $usadoUnix | |
| 21 | ||
| 22 | # Retira as linhas em branco repetidas para reduzir o tamanho final do arquivo. | |
| 23 | - | declare -A registroPadrao=() |
| 23 | + | |
| 24 | - | while read linhaPadrao; do |
| 24 | + | |
| 25 | - | if [ "${linhaPadrao:0:1}" == "[" ]; then
|
| 25 | + | |
| 26 | - | chavePadrao=${linhaPadrao#[}
|
| 26 | + | # Agrupa um registro com seus atributos em uma |
| 27 | - | chavePadrao=${chavePadrao%]}
|
| 27 | + | # única linha. |
| 28 | - | chavePadrao=${chavePadrao//\\/.BARRA.}
|
| 28 | + | sed -i "s/^\[/\}\n\[/g" $padraoUnix |
| 29 | - | registroPadrao+=([$chavePadrao]="") |
| 29 | + | sed -i "1d" $padraoUnix |
| 30 | - | else |
| 30 | + | echo "}" >> $padraoUnix |
| 31 | - | registroPadrao["$chavePadrao"]+="$linhaPadrao#;#" |
| 31 | + | sed -ni '/\[/{:inicio;/}/!{N;binicio};s/\n/##;/g;s/}$//g;p}' $padraoUnix
|
| 32 | - | fi |
| 32 | + | |
| 33 | - | done < $padraoUnix |
| 33 | + | sed -i "s/^\[/\}\n\[/g" $usadoUnix |
| 34 | sed -i "1d" $usadoUnix | |
| 35 | - | declare -A registroUsado=() |
| 35 | + | echo "}" >> $usadoUnix |
| 36 | - | while read linhaUsada; do |
| 36 | + | sed -ni '/\[/{:inicio;/}/!{N;binicio};s/\n/##;/g;s/}$//g;p}' $usadoUnix
|
| 37 | - | if [ "${linhaUsada:0:1}" == "[" ]; then
|
| 37 | + | |
| 38 | - | chaveUsada=${linhaUsada#[}
|
| 38 | + | # Realiza a comparação entre os arquivos e salva o resultado em "/home/$USER/diferenca.txt" |
| 39 | - | chaveUsada=${chaveUsada%]}
|
| 39 | + | diff --changed-group-format='%>' --unchanged-group-format='' $padraoUnix $usadoUnix > $resultado |
| 40 | - | chaveUsada=${chaveUsada//\\/.BARRA.}
|
| 40 | + | |
| 41 | - | registroUsado+=([$chaveUsada]="") |
| 41 | + | rm $padraoUnix |
| 42 | - | else |
| 42 | + | rm $usadoUnix |
| 43 | - | registroUsado[$chaveUsada]+="$linhaUsada#;#" |
| 43 | + | |
| 44 | - | fi |
| 44 | + |