GNU/Linux >> Linux の 問題 >  >> Linux

Linux ターミナルで 2 つのファイルを比較する

vim がインストールされている場合は、これを試してください:

vimdiff file1 file2

または

vim -d file1 file2

あなたはそれが素晴らしいと思うでしょう。


sdiff を試す (man sdiff )

sdiff -s file1 file2

git diff からの diff 出力スタイルを好む場合 、 --no-index で使用できます git リポジトリにないファイルを比較するためのフラグ:

git diff --no-index a.txt b.txt

それぞれ約 20 万個のファイル名文字列を含むいくつかのファイルを使用して、ベンチマークを行いました (組み込みの time コマンド)このアプローチと他の回答のいくつかをここで比較してください:

git diff --no-index a.txt b.txt
# ~1.2s

comm -23 <(sort a.txt) <(sort b.txt)
# ~0.2s

diff a.txt b.txt
# ~2.6s

sdiff a.txt b.txt
# ~2.7s

vimdiff a.txt b.txt
# ~3.2s

comm git diff --no-index ながら、群を抜いて最速のようです diff スタイルの出力の最速のアプローチのようです。

2018 年 3 月 25 日更新 実際には --no-index を省略できます Git リポジトリ内にいて、そのリポジトリ内の追跡されていないファイルを比較したい場合を除き、フラグを立てます。マニュアルページから:

<ブロック引用>

このフォームは、ファイルシステム上の指定された 2 つのパスを比較するためのものです。 Git によって制御される作業ツリーでコマンドを実行し、パスの少なくとも 1 つが作業ツリーの外を指している場合、または Git によって制御される作業ツリーの外でコマンドを実行する場合は、 --no-index オプションを省略できます。


それらを並べ替えて comm を使用します :

comm -23 <(sort a.txt) <(sort b.txt)

comm は入力ファイルを比較 (ソート) し、デフォルトで 3 つの列を出力します:a に固有の行、b に固有の行、および両方に存在する行です。 -1 を指定することで 、 -2 および/または -3 対応する出力を抑制することができます。したがって、comm -23 a b a に固有のエントリのみをリストします。 <(...) を使用しています オンザフライでファイルをソートするための構文。ファイルが既にソートされている場合、これは必要ありません。


Linux
  1. Linuxでファイルを圧縮および解凍する方法

  2. Linuxでfdコマンドを使用してファイルを検索する方法

  3. Linuxで2つのソートされていないリストを比較し、2番目のファイルに一意のものをリストします

  1. Linuxターミナルでファイルをコピーする

  2. Linux:ファイルを比較せずにディレクトリ構造を比較する

  3. Linux コマンドラインから S3 アカウントにファイルをアップロードする

  1. Linuxターミナルでファイルの名前を変更します

  2. Linuxターミナルでファイルを移動する

  3. Linuxで2つのテキストファイルを結合する方法