Здравствуйте!
Что-то под конец дня ни как не пойму простой вещи.
Имеется два файла, содержащие скажем
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 безжалостно стирается, либо дублируется.
Что я не правильно делаю ?
Заранее благодарю.
Здравствуйте, 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}'
{ cat 2.txt; cat 1.txt; } | awk -F= '{ dict[$1]=$2 } END { for (v in dict) { print v "=" dict[v] } }'
Как вариант можно использовать что-то типа:
# 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 и т.д.