
unixのコマンドにdiffというものがあります。unixだけでなく、Windowsのコマンドでも環境を整えたら使えるようですが。
さて、このdiffですが、動作がイマイチわかりません。2つのテキスト(プログラム)の違いを抽出すると理解しています。たとえば、1000行の文書があり、2つは全く同じですが、片方だけ1行目が空白だったとします。そうしますと、たとえ1行のズレているだけだとしても全部の行が違うわけですから”全部の行が異なる”という結果になるかなと思ったら1行目のカラ行抽出してくれるようです。それはありがたいことですが、厳密性という意味ではヌケがあるように思います(全行ちがうわけなので)。diffではテキストの違いを抽出ということですが、どのようなことが行われると理解すればいいのでしょうか。2つの違いを報告するときの報告の仕方がいろいろあるはずだと思うのですが。
2つのソースプログラムがあり、片方をコピーしてもう片方を作りアレコレ変更しているうちにわからなくなったので比較する、というようなことに使えるでしょうか。変更は行内変更もあれば、行を付け加えたり、削ったりしています。どこを変えたのか分からなくなるので。
よろしくお願いします。
A 回答 (7件)
- 最新から表示
- 回答順に表示
No.7
- 回答日時:
diffは最長の共通部分が優先されるはずなので、質問者様の考える、1行の差と、ずれた999行なら、999行は同じ、と解釈されるはずです。
オプションには、「空白やタブを無視する」「改行を無視する」「大文字小文字を無視する」というような実装がされていると思いますが、おおむね似たような2つがあって、無視できない差を見つけたい、という用途に使うという感じでしょうか。
質問者様が考えるように、どちらかというと、プログラムの差分を見つけるのに便利なオプションが多いと思います。パッチあてする場合の、パッチ作成に使われたりします。
最近では、プログラムはバージョン管理システムを使って実装することが多いと思いますが、昔は、更新前にコピーして原本を保存することも多かったので、みんながコピーを作ってしまって、どれが最新かわからない、なんて時にも使ったりします。
No.6
- 回答日時:
仕組みとしては、旧から新へどのような操作が行われたか、を基本として調査します。
そのため、以下の様な用途に使えます。
* 変更履歴
バージョン管理システムにて管理しているファイルは、
その変更履歴を全て記録しなければならないため、
diff の結果を差分圧縮として利用しデータ量を削減します。
* パッチ
一般に公開しているプログラムやデータに対して、
ごく一部分だけを修正したい場合は、
diff を利用して作成した修正内容(パッチ)だけを配布します。
* コードレビュー
銀行とか交通管制の用途に使用されるような、高い安全性が要求されるプログラムに対して、
なんらかの改修した際は必ずコードレビューなる検査が入ります。
その検査資料を作成する際に、変更内容のみを提示できる diff が便利です。
No.5
- 回答日時:
意外にもこれまでの回答では言及されていないので補足しますが、diffコマンドではどのオプションでも第1引数のファイルと第2引数のファイルそれぞれの行番号が表示されます。
各オプションの意味はmanを見てください。・a.txt:
line1
line2
line3
line4
line5
・b.txt:
line1
line2
line3 b.txt
line5
line5b
$ diff a.txt b.txt
3,4c3
< line3
< line4
---
> line3 b.txt
5a5
> line5b
$ diff -u a.txt b.txt
--- a.txt 2015-06-11 02:56:28.000000000 +0900
+++ b.txt 2015-06-11 02:57:00.000000000 +0900
@@ -1,5 +1,5 @@
line1
line2
-line3
-line4
+line3 b.txt
line5
+line5b
No.4
- 回答日時:
「片方のファイルに、どういう修正を加えれば、他方のファイルになるか」を表示するコマンドです。
なので、「先頭に空行1行挿入すればいい」という操作が表示されます。
No.2
- 回答日時:
あなたが直接diffを使う必要はないでしょう。
他のプログラムからdiffが利用されることがあります。例えばソースコードのバージョン管理システムの一つ(RCS)ではソースコードの差分を知るためにdiffが内部で使われています。
diffの存在を意識しなくても、diffを利用したシステムは全く問題なく使えます。
>2つの違いを報告するときの報告の仕方
オプションでdiff標準形式、ユニファイド形式、コンテキスト形式を切り替えられます。
No.1
- 回答日時:
実際にソースコードを見たことがないので正確なところは不明だが、おそらく各行の数行前後を比較対象にしているんじゃないかと思います。
今はdiffよりもsdiffのほうが違いが分かりやすくていいんじゃないでしょうかね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- UNIX・Linux Linuxについて質問です。 以下のhistoryの出力結果から、sedコマンドのファイル名tmp1 1 2023/02/03 20:11
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- Excel(エクセル) エクセルで2つの表を比較して、文字列が同じだが、その行のある値が違うものを抽出したい 1 2022/10/06 21:48
- Visual Basic(VBA) vbaエクセルマクロについて あるデータを作成し、デスクトップに.xlsx形式で保存するマクロを作成 6 2023/03/03 18:05
- Excel(エクセル) Excelマクロ 差分抽出の方法が知りたいです。 2 2023/03/07 13:25
- IT・エンジニアリング インフラエンジニア(ネットワークエンジニア)の検証業務について教えてください。 インフラ初心者なので 2 2022/06/26 00:08
- 財務・会計・経理 業者間での注文書・請書の取り扱いについて 2 2022/06/27 15:53
- その他(データベース) 20万行あるデータを動かしたい 2 2023/06/13 15:21
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて 重複したものがあれば行を削除するとい 1 2023/02/27 18:49
- Visual Basic(VBA) エクセルについて教えてください。 3 2023/06/28 09:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
OSXで常に最後に表示される文字...
-
Fedora Core 2 のコマンド
-
大量のtxtファイルを一つのtex...
-
find で探したファイルを探した...
-
【DOSコマンド】for文の中で変...
-
バッチで特定文字が含まれる先...
-
UNIXで、ディレクトリを比較し...
-
^M削除方法、教えてください。
-
【Linux】findコマンドの表示順
-
Perl:あるファイル名が指定の...
-
viで、2つのファイルを一つの...
-
シェルスクリプトでエラーが出ます
-
ubuntuで、テキストの文字を別...
-
Dirコマンドでフォルダ内ファイ...
-
grepでの日本語検索
-
SONYの音楽ソフト「x-アプリ」...
-
Linux環境 grepで改行コード(CR...
-
至急です、Ubuntuに詳しい方助...
-
pingは正常なのにtracerouteで...
-
エクセルの表にヘンな枠が・・・
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
シェルスクリプトでエラーが出ます
-
【DOSコマンド】for文の中で変...
-
スラッシュ"/"を削除したい
-
renameコマンドでファイル名か...
-
UNIXで、ディレクトリを比較し...
-
バッチで特定文字が含まれる先...
-
【Linux】findコマンドの表示順
-
Linuxで*をつかってファイル移...
-
*.txtファイルの最終行だけ参照...
-
DOSでテキストファイルの中のあ...
-
OSXで常に最後に表示される文字...
-
BATファイルによるfcコマンドで...
-
○行目から□行目だけを表示する...
-
dosバッチを使用して昇順に
-
DOSバッチにて外のファイルの指...
-
unixのdiffコマンドの動作について
-
コマンドプロンプト net user...
-
ファイルの先頭に文字を追加す...
-
shellでsmbclientでファイル転送
-
行の挿入をおこなう。awk?
おすすめ情報