Comando Bash / script para diferenciar todos os mytestN.out e testN.out

0

Eu tenho um executável que vou testar com todos os arquivos de entrada e fazer um número correspondente de arquivos de saída (eu posso fazer essa parte). Então eu vou diferenciar os arquivos recém-criados, chamados mytestN.out, com os arquivos com as saídas corretas, chamados testN.out e canalizá-los para um arquivo chamado difftestN.txt. Então eu vou verificar cada um dos difftest.txt e se estiver vazio, imprima "sucesso" e se não estiver vazio, imprima "diferença encontrada".

Por exemplo, farei

./Executable < test1.in > mytest1.out

para o número N de test.in's. Eu achei que isso pode ser feito com isso

for f in test*.in; do ./tetris <"$f" >"my${f%in}svg"; done

Então eu vou fazer o comando diff para todos os mytest.out contra todos os testes.

diff mytest1.out test1.out > difftest1.txt

Não sei como fazer isso para todos os testNs. Acho que essa é a abordagem correta:

for f in mytest*.svg; do diff "$f" "###what goes here?###" > "diff${f%in}txt"; done

mas eu não sei o que vai depois de "$ f", e o diff será canalizado para um diffmytestN.txt, mas eu quero difftestN.txt

Então, eu quero verificar cada um dos diffftest.txt e se estiver vazio, imprima "sucesso" e se não estiver vazio, imprima "diferença encontrada"

    
por raisinpon 17.11.2015 / 04:52

1 resposta

0

Você pode ajustar isso para um número arbitrariamente grande de arquivos nomeados como você mencionou. Aqui estão 4 conteúdos dos arquivos de teste que usei: test1: um mytest1: 1 teste2: dois mytest2: dois

for i in {1..2}; do 
    diff test${i}.out mytest${i}.out &>/dev/null
    es=$?
    if [ $es -ne 0 ]; then 
        echo "difference found"
    else 
        echo "success"
    fi
done

Saída:

difference found
success

Eu percebo que não respondi a sua pergunta literal, porque você pediu por arquivos contendo a saída do diff. Se você realmente tem que ter isso, você pode alterar o código:

  diff test${i}.out mytest${i}.out > difftest${i}.txt

  if ! [[ -s difftest${i} ]]; then 
      echo success
  else
      echo "difference found"
  fi

Provavelmente é útil ter em mente que, caso seu programa tente comparar um arquivo com conteúdo a um arquivo inexistente, ele criará uma saída para stderr que pareça ter havido uma diferença significativa entre o arquivo e o arquivo. arquivo inexistente. Isso deve ser bom, pois somente o stdout entra em * .txt.

    
por 17.11.2015 / 05:33