Asignar nombres de columnas diff -y

Asignar nombres de columnas diff -y

Tengo dos archivos 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

Guion:

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

El script funciona absolutamente bien, el resultado 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 usando solo el comando diff?

Respuesta1

Hay varias mejoras que podrías hacer a tu enfoque pero, manteniendo todo igual, todo lo que necesitas es agregar una línea más a tu script y luego hacer que la última línea agregue ( >>) en lugar de sobrescribirla:

#!/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 ejecuta con:

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

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

Alternativamente, si desea que se muestren los nombres de archivos reales, cambie la printfllamada anterior a

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

información relacionada