Назначить имена столбцов diff -y

Назначить имена столбцов diff -y

У меня есть два файла и скрипт оболочки.

Файл 1:

Batman
Superman
John Snow
Jack Sparrow
Rob Stark

Файл 2:

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

Сценарий:

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

Скрипт работает абсолютно нормально, вывод такой:

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

Но я хочу, чтобы вывод был автоматически:

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

Каков наилучший способ сделать это, используя только команду diff?

решение1

Вы можете внести различные улучшения в свой подход, но, оставляя все по-прежнему, все, что вам нужно, это добавить еще одну строку в свой скрипт, а затем сделать так, чтобы последняя строка добавлялась ( >>), а не перезаписывалась:

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

Лучший способ написать это был бы

#!/usr/bin/env bash

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

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

И затем запустите:

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

Это позволяет избежать создания ненужных временных файлов и не требует жесткого кодирования имен файлов в скрипте.

В качестве альтернативы, если вы хотите, чтобы отображались реальные имена файлов, измените printfвызов выше на

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

Связанный контент