para loop para diferenciar pares de arquivos

0

Eu tenho um script que faz login em cerca de 30 pares de roteadores. O script executa um comando e salva a saída em um arquivo, depois passa para o próximo roteador e assim por diante.

Agora quero executar um 'diff' em cada par de arquivos do roteador e, em seguida, 'diff' o próximo par, etc. diff rtr_1a rtr_1b then diff rtr_2a rtr_2b e assim por diante ....

Como posso dizer 'diff' para comparar apenas pares específicos de arquivos sem codificar manualmente os nomes em várias instruções diff?

    
por machinist 29.06.2017 / 13:17

1 resposta

2

Supondo que todos os arquivos são chamados rtr_ia e rtr_ib para i entre 1 e 30:

#!/bin/bash

for (( i = 1; i <= 30; ++i )); do
    diff "rtr_${i}a" "rtr_${i}b"
done

Para salvar os diffs em arquivos:

#!/bin/bash

for (( i = 1; i <= 30; ++i )); do
    diff "rtr_${i}a" "rtr_${i}b" >"rtr_${i}.diff"
done

Após comentários:

#!/bin/bash

for rtra in *rtr*a; do
   rtrb="${rtra%a}b"
   diff -- "$rtra" "$rtrb"
done

ou

#!/bin/bash

for rtra in *rtr*a; do
   rtrb="${rtra%a}b"
   diff -- "$rtra" "$rtrb" >"${rtra}_${rtrb}.diff"
done

... para salvar em um arquivo.

Isso corresponde a todos os nomes de arquivos prefix-rtrNa e, para cada um desses, cria o nome de arquivo prefix-rtrNb correspondente ( ${rtra%a} removerá o a do valor de $rtra ). Em seguida, ele diferencia os dois arquivos.

    
por 29.06.2017 / 13:21

Tags