Asignar nombres de columna y diff

Tengo dos files y un script de shell.

Archivo 1:

Batman Superman John Snow Jack Sparrow Rob Stark 

Archivo 2:

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

Guión:

 #!/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 

La secuencia de commands funciona absolutamente bien, la salida es:

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

Pero quiero que la salida sea automáticamente:

 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 

¿Cuál es la mejor manera de hacerlo utilizando solo el command diff?

Hay varias mejoras que podría hacer a su enfoque pero, manteniendo todo igual, todo lo que necesita es agregar una línea más a su secuencia de commands y luego agregar la última línea ( >> ) en lugar de sobrescribir:

 #!/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 

Una mejor manera de escribir esto sería

 #!/usr/bin/env bash file1="$1" file2="$2" printf "%-36s%36s\n" "FileA" "FileB" diff -y <(sort "$file1") <(sort "$file2") 

Y luego corre con:

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

Esto evita la creación de files temporales innecesarios y no requiere que los nombres de los files estén codificados en el script.

Alternativamente, si desea que se muestren los nombres reales de los files, cambie la llamada de printf anterior a

 printf "%-36s%36s\n" "$file1" "$file2"