Як я можу вивести різницю між двома файлами?


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 Дякую Щойно натрапив на це на іншому форумі, чудово працює. Я до цього не натрапляв. Я сподіваюся, що ця відповідь буде корисною для майбутніх запитів інших учасників.
Бен

@schaiba може також відповісти на це. Не забудьте розібратися з різними роботами на лініях, а не полях.
terdon

Відповіді:


9

Утиліта, яку ви шукаєте diff. Загляньте в посібник, щоб отримати детальну інформацію.



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відповідно.


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


3

diff [options] from-file to-file

diffпорівнює вміст двох файлів з файлу та to-file. Ви можете вказати -iпараметр, який ігнорує зміни у випадку; вважати великими і малими літерами еквівалентні.

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


2

ви можете спробувати ті ж вікна, що й fcкоманда в Unix та Linux, тобто diff <file_new> <file_old>команда.

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

Рядки зі -знаком видаляються з нового файлу, проте вони існували в старій версії

Рядки зі +знаком додаються з нового файлу, однак вони не існували в старій версії файлу

Позначення Linux

Linux використовує > та<

>означає рядок із старого файлу <означає рядок із нового файлу, який змінюється у старому файлі


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.