Atribui nomes de coluna diff -y

1

Eu tenho dois arquivos e um script de shell.

Arquivo 1:

Batman
Superman
John Snow
Jack Sparrow
Rob Stark

Arquivo 2:

Batman
Ironman
Superman
Spiderman
John Snow
Arya Stark
Jack Sparrow
Rob Stark
The hound

Script:

#!/bin/bash

sort ~/Desktop/file1.txt > ~/Desktop/fileA.txt
sort ~/Desktop/file2.txt > ~/Desktop/fileB.txt
diff -y ~/Desktop/fileA.txt ~/Desktop/fileB.txt > ~/Desktop/diff.txt

O script é executado absolutamente bem, a saída é:

                                  > Arya Stark
Batman                              Batman
                                  > Ironman
Jack Sparrow                        Jack Sparrow
John Snow                           John Snow
Rob Stark                           Rob Stark
                                  > Spiderman
Superman                            Superman
                                  > The hound

Mas quero que a saída seja automaticamente:

File A                               File B
                                  > Arya Stark
Batman                              Batman
                                  > Ironman
Jack Sparrow                        Jack Sparrow
John Snow                           John Snow
Rob Stark                           Rob Stark
                                  > Spiderman
Superman                            Superman
                                  > The hound

Qual é a melhor maneira de usar somente o comando diff?

    
por gkmohit 19.06.2014 / 16:53

1 resposta

3

Existem várias melhorias que você poderia fazer na sua abordagem, mas, mantendo tudo igual, tudo o que você precisa é adicionar mais uma linha ao seu script e fazer a última linha anexada ( >> ) em vez de sobrescrever:

#!/bin/bash

echo -e "FileA\t\t\t\t\t\t\t\tFileB" > diff.txt
sort ~/Desktop/file1.txt > ~/Desktop/fileA.txt
sort ~/Desktop/file2.txt > ~/Desktop/fileB.txt
diff -y ~/Desktop/fileA.txt ~/Desktop/fileB.txt >> ~/Desktop/diff.txt

Uma maneira melhor de escrever isso seria

#!/usr/bin/env bash

file1="$1"
file2="$2"

printf "%-36s%36s\n" "FileA" "FileB"
diff -y <(sort "$file1") <(sort "$file2")

E, em seguida, execute com:

script.sh file1.txt file2.txt > diff.txt

Isso evita a criação de arquivos temporários desnecessários e não exige que os nomes dos arquivos sejam codificados no script.

Como alternativa, se você quiser que os nomes dos arquivos reais sejam exibidos, altere a chamada printf acima para

printf "%-36s%36s\n" "$file1" "$file2"
    
por 19.06.2014 / 16:59