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"

관련 정보