problema ao ler e comparar arquivos usando loops aninhados [closed]

0
while read newfile <&3; do   
 if [[ ! $newfile =~ [^[:space:]] ]] ; then  #empty line exception
    continue
 fi   
 #
 while read oldfile <&3; do   
 if [[ ! $oldfile =~ [^[:space:]] ]] ; then  #empty line exception
    continue
 fi   
    echo Comparing "$newfile" with "$oldfile"
    #
    if diff "$newfile" "$oldfile" >/dev/null ; then
      echo The files compared are the same. No changes were made.
    else
        echo The files compared are different.
    fi    
 done 3</infanass/dev/admin/oldfiles.txt
done 3</infanass/dev/admin/newfiles.txt

Acho que este é o caminho certo para fazer loops aninhados ... mas não funciona bem.

    
por mkrouse 10.07.2013 / 22:24

1 resposta

3

Você não precisa usar o descritor de arquivo 3 assim.

while read newfile do   
    if [[ ! $newfile =~ [^[:space:]] ]] ; then  #empty line exception
       continue
    fi   

    while read oldfile ; do   
       if [[ ! $oldfile =~ [^[:space:]] ]] ; then  #empty line exception
          continue
       fi   
       echo Comparing "$newfile" with "$oldfile"

       # diff -q doesn't bother generating a diff.
       # It just tells you whether or not the files match.
       if diff -q "$newfile" "$oldfile" >/dev/null ; then
         echo The files compared are the same. No changes were made.
       else
           echo The files compared are different.
       fi    
    done < /infanass/dev/admin/oldfiles.txt
done < /infanass/dev/admin/newfiles.txt

Supondo que uma linha vazia é uma linha com apenas espaço em branco, o código de exceção da linha vazia pode corresponder a linhas não vazias. Isso irá combinar as linhas com apenas espaços em branco nelas (remova \s* para fazer com que corresponda apenas às linhas vazias):

if [[ ! $newfile =~ ^\s*$ ]] ; then  #empty line exception
    
por 10.07.2013 / 22:28

Tags