Làm thế nào tôi có thể xuất sự khác biệt giữa 2 tập tin?


11

Tập tin của tôi bao gồm những điều sau đây; đại khái:

username:username:username:username:username 

Dòng trên tiếp tục khoảng 600 ký tự.

Tôi sử dụng awklệnh để sử dụng nó làm đối số trong yêu cầu API / HTTP được gửi từ dòng lệnh.

Tôi đang sử dụng tập lệnh của mình để nhận danh sách tài khoản người dùng 'theo dõi' tôi và cứ sau 24 giờ, so sánh danh sách ban đầu trên đĩa cứng của tôi với danh sách tên người dùng mới xuất (và lặp lại những người không còn theo dõi tôi . Tôi sẽ phải gói gọn logic của mình vào một vòng lặp bằng cách sử dụng bash .. kiểm tra từng tên người dùng.

Kịch bản hiện tại của tôi:

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

Câu hỏi của tôi là;
Làm thế nào tôi có thể xuất sự khác biệt giữa 2 tập tin?


Bạn biết về diff, phải không?
schaiba

@schaiba Cảm ơn bạn. Chỉ cần bắt gặp trên một diễn đàn khác, hoạt động rất tốt. Tôi đã không vấp phải nó trước đó. Tôi hy vọng câu trả lời này hữu ích cho các truy vấn trong tương lai của các thành viên khác.
Ben

@schaiba cũng có thể đưa ra câu trả lời về nó. Hãy chắc chắn để đối phó với diff làm việc trên các dòng không phải trường.
terdon

Câu trả lời:



13

Đưa ra hai tệp chứa danh sách người dùng chưa được sắp xếp, ví dụ:

In file1:
    userD
    user3
    userA
    user1
    userB

In file2:
    user3
    userB
    userX
    user1

sau đó để có được một danh sách đơn giản của người dùng file1nhưng không có file2, bạn có thể làm

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

và tương tự để có được người dùng file2nhưng không phải trongfile1

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

Nếu các tệp danh sách đã được sắp xếp, chúng có thể được đơn giản hóa comm -23 file1 file2comm -13 file1 file2tương ứng.


1
Có thể sử dụng commmà không cần phân loại? Tập tin văn bản của tôi có giá trị thích 1, 2, 01, 02, 0000, 0001, 0002, vv Sử dụng sortsẽ de-sort thứ tự ...
Lanti

6

Lệnh tốt nhất để xem sự khác biệt trong nội dung tệp sẽ là

vim -d file1 file2

3

diff [options] from-file to-file

diffso sánh nội dung của hai tệp từ tệp và to-file. Bạn có thể chỉ định -itùy chọn bỏ qua các thay đổi trong trường hợp; xem xét các chữ cái viết hoa và viết thường

Để biết thêm thông tin, bạn có thể tham khảo liên kết này: http://www.computerhope.com/unix/udiff.htm hoặc bạn có thể xem trang hướng dẫn.


2

bạn có thể thử các cửa sổ giống như fclệnh trong Unix và Linux tức là diff <file_new> <file_old>lệnh.

Dòng có +++hoặc ---trước mặt họ đã thay đổi và một dòng không +'s-'skhông thay đổi

Các dòng có -dấu được xóa khỏi tệp mới tuy nhiên chúng tồn tại trong phiên bản cũ

Các dòng có +dấu được thêm vào từ tệp mới tuy nhiên chúng không tồn tại trong phiên bản cũ của tệp

Ký hiệu Linux

Linux sử dụng ><

>có nghĩa là dòng từ tệp cũ <có nghĩa là dòng từ tệp mới được thay đổi trong tệp cũ


0

Đi cho vimdiff cho thấy sự khác biệt giữa hai, ba hoặc bốn phiên bản của cùng một tập tin.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.