Diff dois arquivos lado a lado, novas linhas na coluna da esquerda para nenhuma correspondência

5

Isso tem sido a melhor parte do meu dia e eu tenho certeza que essa solução deve existir (se não, então eu estou programando uma), mas ai, aqui está a questão.

Eu tenho dois arquivos, hpc.sorted.modules.txt e bduc.sorted.modules.txt . O que eu quero realizar é mostrar uma comparação lado a lado dos dois arquivos em que as alterações não em qualquer dos arquivos estão em sua coluna vazia. Não quero que diff seja anexado à mesma linha com > < ou | se eles não corresponderem.

Exemplo de saída: link usando

diff -y -W 100 hpc.sorted.new.list bduc.sorted.new.list

Para enfatizar ainda mais o ponto, se você olhar o exemplo, a linha:

bfast/0.7.0a                      | bedtools/2.6.1

não deveria existir. Em vez disso, eles devem estar em linhas separadas com uma linha vazia na coluna esquerda ou direita.

    
por Adam 30.11.2012 / 23:33

2 respostas

3

Supondo que a largura da tela (opção -W) seja uniforme, tente o seguinte

diff --expand-tabs -W 100 -y  hpc.sorted.new.list bduc.sorted.new.list |
awk -v W=100 '(substr($0,W/2,1)=="|")
                  {left=substr($0,1,(W/2)-1);print left "<";
                   right=substr($0,(W/2)+1);printf "%" ((W/2)-1) "s>%s\n"," ", right;
                   next;}1'
    
por 01.12.2012 / 00:41
1
format="%-50s | %-50s\n"
comm --output-delimiter=: hpc.sorted.modules.txt bduc.sorted.modules.txt |
while IFS= read -r line; do      
    case $line in
        ::*) line=${line#::}; printf "$format" "$line" "$line" ;;
        :*)  line=${line#:};  printf "$format" "" "$line" ;;
        *)                    printf "$format" "$line" "" ;;     
    esac
done

Ajuste o formato para se adequar.

    
por 01.12.2012 / 20:26