• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Squall2000

Trabalho de Bash

1 mensagem neste tópico

Epa peço desculpa à malta por tar aqui a perguntar isto, mas cheguei a um ponto que não consigo realmente resolver esta situação  :wallbash:, e agradecia imenso se alguem me podesse ajudar, ou pelo menos dar-me umas luzes.

Fica então aqui em baixo o problema em questão:

Comando gdiff

O comando gdiff compara todos os pares de ficheiros com o mesmo nome situados abaixo de uma determinada directoria e agrupa-os pelo número de linhas diferentes entre si. A sintaxe do comando é a seguinte:

gdiff [OPTION] [dir] filename

gdiff utiliza o comando find para procurar todos os ficheiros com nome <filename> na directoria <dir> e nas suas sub-directorias. Por omissão, o comando utiliza a directoria corrente.

O comando faz comparações dois-a-dois dos ficheiros encontrados utilizando o comando diff com os parâmetros "--ignore-case --ignore-tab-expansion --ignore-space-change --ignore-all-space --ignore-blank-lines --strip-trailing-cr" e regista o número de linhas de output deste comando.

Os resultados são apresentados agrupando as comparações para as quais o comando diff retorna o mesmo número de linhas. O comando indica também o número de comparações em cada grupo.

Exemplo de utilização

bugs:trab1$ ./gdiff fich3

0: 3

./teste/fich3<->./teste.3/fich3

./teste/fich3<->./teste.4/fich3

./teste.3/fich3<->./teste.4/fich3

2: 6

./teste/fich3<->./teste.1/fich3

./teste/fich3<->./teste.2/fich3

./teste.1/fich3<->./teste.3/fich3

./teste.1/fich3<->./teste.4/fich3

./teste.2/fich3<->./teste.3/fich3

./teste.2/fich3<->./teste.4/fich3

4: 1

./teste.1/fich3<->./teste.2/fich3

O comando gdiff foi executado para o ficheiro fich3 na directoria corrente. Constatou-se que:

bullet os ficheiros fich3 das directorias teste, teste.3 e teste.4 são iguais (o comando diff retornou 0 linhas)

bullet a comparação dos ficheiros fich3 nas directorias teste e teste.1; teste e teste.2; teste.1 e teste.3; teste.1 e teste.4; teste.2 e teste.3; teste.2 e teste.4; resultou em 2 linhas de output pelo comando diff.

bullet A comparação entre teste.1/fich3 e teste.2/fich3 resultou num output de 4 linhas pelo comando diff.

Opções

Existem três opções:

-s:

    imprime uma versão reduzida, indicando apenas o número de ocorrências. Ou seja, o comando:

    bugs:trab1$ ./gdiff -s fich3

    retorna:

    0: 3

    2: 6

    4: 1

   

-h:

    imprime informação de ajuda e termina. A função que apresenta o texto é disponibilizada no site da cadeira.

-f <opt>:

    possibilita o refinamento da selecção de ficheiros a comparar passando <opt> para a lista de argumentos do comando find.

Sugestões para a concretização

bullet Utilize getopts e expansão de parâmetros para tratamento das opções.

bullet Utilize dois ciclos for para iterar sobre a lista de ficheiros. Para evitar duplicação de operações actualize a lista de ficheiros do ciclo interior a cada iteração do ciclo exterior, utilizando a expansão de parâmetros para retirar o ficheiro que está seleccionado pelo ciclo exterior.

bullet Utilize o comando wc para contar o número de linhas de output de diff.

bullet Utilize um array para agrupar as comparações que retornam o mesmo número de linhas. Note que o texto de cada comparação (file1<->file2) pode ser concatenado com outras comparações que geraram o mesmo resultado.

Muito obrigado desde já!  :ipool:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora