diff но без удаления новых строк
От: Tujh Голландия  
Дата: 24.12.09 18:54
Оценка:
Здравствуйте!
Что-то под конец дня ни как не пойму простой вещи.
Имеется два файла, содержащие скажем
1.txt
fist=1
second=2

2.txt
first=1
second=5
another=10

и нужно получить файл, содержащий только новые строки из второго, но не изменяя строк из первого, т.е. для данного примера:
result.txt
first=1
second=2
another=10

используя diff+patch ни как не могу получить нужный результат, строка another=10 безжалостно стирается, либо дублируется.
Что я не правильно делаю ?

Заранее благодарю.
Re: diff но без удаления новых строк
От: teufelsjunge Россия  
Дата: 24.12.09 21:36
Оценка: 4 (2)
Здравствуйте, Tujh, Вы писали:

T>Здравствуйте!

T>Что-то под конец дня ни как не пойму простой вещи.
T>Имеется два файла, содержащие скажем
T>1.txt
T>
fist=1
T>second=2

T>2.txt
T>
first=1
T>second=5
T>another=10

T>и нужно получить файл, содержащий только новые строки из второго, но не изменяя строк из первого, т.е. для данного примера:
T>result.txt
T>
first=1
T>second=2
T>another=10

T>используя diff+patch ни как не могу получить нужный результат, строка another=10 безжалостно стирается, либо дублируется.
T>Что я не правильно делаю ?

T>Заранее благодарю.


Про patch и diff не знаю, но можно сделать через join и awk
join -t '=' -a 2 1.txt 2.txt | awk -F '=' '{print $1"="$2}'
Re: diff но без удаления новых строк
От: dilmah США  
Дата: 28.12.09 15:39
Оценка:
{ cat 2.txt; cat 1.txt; } | awk -F= '{ dict[$1]=$2 } END { for (v in dict) { print v "=" dict[v] } }'
Re: diff но без удаления новых строк
От: sawoy Россия  
Дата: 28.12.09 21:39
Оценка:
Как вариант можно использовать что-то типа:

# cat /1.txt; echo ""; cat /2.txt; echo ""; diff --old-group-format='' --new-group-format='%>' --unchanged-group-format='' --changed-group-format='%>' /1.txt /2.txt
fist=1
second=2

first=1
second=5
another=10

first=1
second=5
another=10


Кстати, для этого частного случая работает и просто diff -upd /1.txt /2.txt | grep '^+' | grep -v '^++'

хотя для чуть более различных файлов работает хуже:

# cat /t11.txt; echo ""; cat /t2.txt; echo ""; diff --old-group-format='' --new-group-format='%>' --unchanged-group-format='' --changed-group-format='%>' /t11.txt /t2.txt
f=6
2=h
d=4
5=t
fgdsfg=dsfgsdfg
dsfgdsfg=dfgerwgwerg
b=2
d=4
dsfgdsfg
e=5
c=3
ewrgwerg=wergwergwergwergwerg
a=1

a=1
b=2
c=3
d=4
e=5
dfsgsdfgsdfg=dsfrrrrrrrrrrrrrrr
f=6
fgdsfgsdf=gffffffffffffffffffffffffff

a=1
c=3
dfsgsdfgsdfg=dsfrrrrrrrrrrrrrrr
f=6
fgdsfgsdf=gffffffffffffffffffffffffff


Для таких даных лучше использовать тот же awk, perl и т.д.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.