есть два файла новый и старый... в каждом по 1000 строк гдето...коким методом можно быстро получить список строк которые есть в новом но отсутствуют в старом?
строки которые есть в старом но нету в новом не интересуют. эти строки - это имена файлов, вот чтоб не качать файлы заново все, имея списка два выбрать те что появились.
олько вот что ешо. Список файлов это насомом деле строки где через "," много чего, имя файла во второй позиции...у меня вариан был только реализовать чтото не получаеться....
всмысле мысли в голове путаютьсяless file.new | awk -F, '{print $2}' > .new
less file.old | awk -F, '{print $2}' > .oldsed ..... .old > old старый файл пропустить через сед, чтобы он из "имя" --> "/имя/d" получили файл команд для седа на удаление таких строк
sed -f old .new пропустить через сед указав в качестве скрипта модиф. стар. файл
получить нужный список.всё хорошо только вот в именах файла есть точка которую нужно както экранировать и както довставить слеши
нихеранепонятночетысказалномывседружнопосочуствовалиможетвследущийразтыхотябыудосужишсьяпривестипримерыфайлов
>нихеранепонятночетысказалномывседружнопосочуствовалиможетвследущийразтыхотябыудосужишсьяпривестипримерыфайлов:)
не буду грузить своими вариантами просто задача....структура этих файлов
id_clip,file_name.avi,flag,count,prefix,postfix,date,time,limit,ok
и таких под 1000 строк, имена файлов(file_name.avi) нас и интересуют.
вот папка с файлами авишками, сопровождаеться файлом описания, его структура выше.есть машина1, на ней обновленный контент, тоесть есть новые авишки и соответствующие строки в файле описании.
есть машина два - на ней тоже самое но не обновленное, связь между машинами, мои ноги и флэшка:)
так вот, мне нужно имея файл описания со второй машины(стаый файл) и с первой(новый файл)
сформировать список роликов которые есть на первой машине, но ешо нету на второй, шоб флэшкой их туда отнести.
Ну ведь вроде все команды уже подсказали, неужели так лениво маны глянуть
awk -F "," '{print $2}' list_old| sort> list_names_old
awk -F "," '{print $2}' list_new| sort> list_names_new
for i in $(comm -1 -3 list_names_old list_names_new); do cp "$i" /path/to/flash/; done
>Ну ведь вроде все команды уже подсказали, неужели так лениво маны глянуть
>
>awk -F "," '{print $2}' list_old| sort> list_names_old
>awk -F "," '{print $2}' list_new| sort> list_names_new
>for i in $(comm -1 -3 list_names_old list_names_new); do cp "$i" /path/to/flash/;
>doneКстати, еще есть утилита cut, таким образом первые две строки в этом решении могут быть такими:
cut -d',' -f2 list_old | sort -u > list_names_old
cut -d',' -f2 list_new | sort -u > list_names_newну это уже дело вкуса конечно :)
ЗЫ автору топика, судя по всему файлы в формате CSV, т.е. достаточно было сказать об этом в самом начале, на будущее почитайте http://en.wikipedia.org/wiki/Comma-separated_values и обратите внимание на ссылку на rfc. Очень распространенный формат однако ;)
>>Ну ведь вроде все команды уже подсказали, неужели так лениво маны глянутьне лень, и глянул... точнее знал даже про комм... из головы вылетела, а просто несмог без ответа оставить человека с чувством юмора, которому задача не ясна.
а вообще и польза есть, вот про КАТ узнал...
вот только одно интерестно ... зачем -1 -3 флаги.... ведь третья колонка это строки которые есть и там и там, а мне нужно только -2... колонка строк, которые есть только во втором файле.... или я что-то путаю?
>[оверквотинг удален]
>
>не лень, и глянул... точнее знал даже про комм... из головы вылетела,
>а просто несмог без ответа оставить человека с чувством юмора, которому
>задача не ясна.
>
>а вообще и польза есть, вот про КАТ узнал...
>вот только одно интерестно ... зачем -1 -3 флаги.... ведь третья колонка
>это строки которые есть и там и там, а мне нужно
>только -2... колонка строк, которые есть только во втором файле.... или
>я что-то путаю?cat и cut это две разные утилиты :)
флаги для comm говорят не какие строки выводить, а какие строки подавлять.
ps скорость для файла в 1000 строк мерить смысла нет, разница на уровне погрешности измерения, вот если там будет 1Gb данных, тогда будет заметно.
кстате я говорил ещё оскорости работы... вообщем хочу реализовать все вариантыawk sort comm
cat sort comm
awk (for string in newfile grep oldfile)
кстате никто не подскажет, хотелось бы и с седом вариант попробовать
как седом это всё сделать
тоесть из старого файла сделать набор правил на удаление строк по шаблону, и потом новый файл прогнать по этим правилам, результат остануться одни "новинки.ави"результаты теста скорости потом напишу :)
Если вам хочется извращаться, то пожалуйста, делайте в свое удовольствие, зачем только других этим озадачивать. Кстати ваша идея с sed на редкость идиотская.
>есть два файла новый и старый... в каждом по 1000 строк гдето...
>
>
>коким методом можно быстро получить список строк которые есть в новом но
>отсутствуют в старом?
>man comm
>>коким методом можно быстро получить список строк которые есть в новом но
>>отсутствуют в старом?
>man commПример для :))) плаги^Wподражания: http:/openforum/vsluhforumID3/46819.html#5 , там, где строка с comm.