Как вывести разницу между двумя файлами?

11

Мой файл состоит из следующего; грубо:

username:username:username:username:username 

Выше строка продолжается до 600 символов.

Я использую awkкоманду, чтобы использовать ее в качестве аргумента в запросе API / HTTP, отправляемом из командной строки.

Я использую свой сценарий, чтобы получить список учетных записей пользователей, которые следуют за мной, и примерно каждые 24 часа, сравнивая исходный список на моем жестком диске со вновь выведенным списком имен пользователей (и выявляя, кто больше не следует за мной) мне . Мне придется заключить мою логику в цикл, используя 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

Мой вопрос
Как вывести разницу между двумя файлами?

Бен
источник
Вы знаете о diff, верно?
Чайба
@schaiba Спасибо. Просто наткнулся на это на другом форуме, прекрасно работает. Я не сталкивался с этим до этого. Я надеюсь, что этот ответ будет полезен для будущих запросов других участников.
Бен
@schaiba также может дать ответ. Удостоверьтесь, что имеете дело с diff, работающим со строками, а не с полями.
Terdon

Ответы:

13

Даны два файла, содержащие несортированные списки пользователей, например

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соответственно.

steeldriver
источник
1
Можно ли использовать commбез сортировки? Мой текстовый файл имеет такие значения , как 1, 2, 01, 02, 0000, 0001, 0002и т.д. Использование sortдеактивирует рода порядок ...
Lanti
6

Лучшая команда для просмотра разницы в содержании файлов будет

vim -d file1 file2
Випин Кумар
источник
3

diff [options] from-file to-file

diffсравнивает содержимое двух файлов from-file и to-file. Вы можете указать -iопцию, которая игнорирует изменения в регистре; считать буквы в верхнем и нижнем регистре эквивалентными.

Для получения дополнительной информации вы можете обратиться по этой ссылке: http://www.computerhope.com/unix/udiff.htm или вы можете взглянуть на страницу руководства.

Thushi
источник
2

Вы можете попробовать те же окна, как fcкоманда в Unix и Linux, т.е. diff <file_new> <file_old>команда.

Линия с +++или ---перед ними изменилась, а одна без +'sи -'sне изменилась

Строки со -знаком удаляются из нового файла, однако они существовали в старой версии

Строки со +знаком добавляются из нового файла, однако их не было в старой версии файла.

Нотация Linux

Linux использует > и<

>означает строку из старого файла <означает строку из нового файла, которая изменяется в старом файле

Абхиманью Арийский
источник
0

Выберите vimdiff для отображения различий между двумя, тремя или четырьмя версиями одного и того же файла.

SHW
источник