различать два файла и сохранять только новые или измененные строки - PullRequest
9 голосов
/ 01 марта 2012

Я хотел бы написать скрипт bash или несколько команд оболочки, которые решают мою проблему. У меня есть два файла, old.txt, new.txt. Я хотел бы создать файл diff.txt, в котором есть только строки, которые изменились или являются новыми. Например, если бы я имел:

old.txt:

Sierra
Tango
Oscar
Victor
Whiskey
Yankee

new.txt:

Sierra
Tango
Echo
Osc__ar
Victor
Uniform
Whiskey
Yan__kee

Я бы хотел diff.txt, который выглядит следующим образом:

Echo
Osc__ar
Uniform
Yan__kee

В перспективе я пишу этот сценарий, чтобы помочь мне создать дифференциальную запись Motorolla S2 для загрузки программ через последовательный порт на встроенный компьютер. Я достаточно хорошо знаю bash, просто не знаю, с чего начать.

Ответы [ 3 ]

16 голосов
/ 01 марта 2012
$ grep -v -f old.txt new.txt
Echo
Osc__ar
Uniform
Yan__kee
9 голосов
/ 01 марта 2012
$ awk 'FNR==NR{old[$0];next};!($0 in old)' old.txt new.txt
Echo
Osc__ar
Uniform
Yan__kee
1 голос
/ 12 июня 2015

Вот как только новые строки и измененные строки, используя diff:

$ cat file.txt file2.txt 
line 1
line 2
line 3
line 4
line 5
line 5
$ cat file2.txt 
line 1
line 2
line 3
line 4b
line 5
line 6

$  diff --changed-group-format='***%>' --unchanged-group-format='' --new-group-format='+++%>' file.txt file2.txt
***line 4b
+++line 6
...