두 개의 파일과 쉘 스크립트가 있습니다.
파일 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"