2つのファイルとシェルスクリプトがあります。
ファイル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
さまざまなアプローチを改善できますが、すべてを同じに保ちながら、スクリプトに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"