web-dev-qa-db-ja.com

2つのファイルの違いを出力するにはどうすればよいですか?

私のファイルは以下で構成されています。おおよそ:

username:username:username:username:username 

上記の行は約600文字まで続きます。

コマンドラインから送信されたAPI/HTTPリクエストの引数として使用するために、awkコマンドを使用しています。

私のスクリプトを使用して、「フォロー」しているユーザーアカウントのリストを取得しています。24時間ごとに、ハードディスクの元のリストと新しく出力されたユーザー名のリストを比較します(そしてecho'ing whoは私をフォローしていません。bashを使用してループにロジックをカプセル化する必要があります。各ユーザー名をテストします。

私の現在のスクリプト:

user=$(awk -F: '{ print $1 }' FILE)  # Grab $User to use as an argument.  
following=$(exec CURRENT_FOLLOWERS) # Outputs the new file

echo "X amount of users are following you on 78B066B87AF16A412556458AC85EFEF66155"  

          SAVE CURRENT FOLLOWERS TO NEW A FILE.  


if [[ DIFFERENCE IS DETECTED ]] ; then    

          echo -ne "$User NO LONGER FOLLOWING YOU\r"

   else echo -ne "This user is following you still.\r"
fi

私の質問です。
2つのファイルの違いを出力するにはどうすればよいですか?

11
Ben

あなたが探しているユーティリティはdiffです。詳細はマニュアルをご覧ください。

9
schaiba

ユーザーの並べ替えられていないリストを含む2つのファイルがあるとします。

In file1:
    userD
    user3
    userA
    user1
    userB

そして

In file2:
    user3
    userB
    userX
    user1

次に、file1ではなくfile2ではないユーザーの簡単なリストを取得するには、次のようにします

$ comm -23 <(sort file1) <(sort file2)
userA
userD

同様に、file2のユーザーを取得しますが、file1のユーザーは取得しません

$ comm -13 <(sort file1) <(sort file2)
userX

リストファイルが既に並べ替えられている場合、これらはそれぞれcomm -23 file1 file2およびcomm -13 file1 file2に簡略化できます。

13
steeldriver

ファイルの内容の違いを表示するのに最適なコマンドは、

vim -d file1 file2
6
vipin kumar

diff [options] from-file to-file

diffは、2つのファイルfrom-fileとto-fileの内容を比較します。-i大文字小文字の変更を無視するオプション。大文字と小文字を同等と見なしてください。

詳細については、次のリンクを参照してください。 http://www.computerhope.com/unix/udiff.htm または、マニュアルページをご覧ください。

3
Thushi

unixとLinuxのfcコマンドのような同じウィンドウ、つまりdiff <file_new> <file_old>コマンドを試すことができます。

それらの前に+++または---がある行は変更され、+'sおよび-'sがない行は変更されていません

-記号の付いた行は新しいファイルから削除されますが、古いバージョンには存在していました

+記号の付いた行は新しいファイルから追加されますが、古いバージョンのファイルには存在しませんでした

Linux表記

Linuxは>および<を使用します

>は古いファイルの行を意味します<は古いファイルで変更された新しいファイルの行を意味します

2
Abhimanyu Aryan

同じファイルの2つ、3つ、または4つのバージョンの違いを表示するために vimdiff に進みます。

0
SHW