Друзья! Помогите сделать такую вещь:
Есть файл 1.txt и есть файл 2.txt
Нужно удалить строки из файла 1.txt которые идентичны строкам из 2.txt
Другими словами нужно "вырезать" содержимое файла 2.txt из файла 1.txt
Файл 1.txt имеет около 1500 строк. Файл 2.txt имеет около 300 строк.
открываешь доку по башу, заганяешь 1 строку 2го файла в массив, прогоняешь 1 файл, берешь 2ую строку... и т.д.
или заганяешь 2ой файл в массивы, и пропускаешь 1 файл через массивы... как получеться оптимальнее, решай сам... в разных ситуациях по разному... в одних нужна скорость, в других можно пренебречь, но поберечь ресурсы
>открываешь доку по башу, заганяешь 1 строку 2го файла в массив, прогоняешь
>1 файл, берешь 2ую строку... и т.д.
>или заганяешь 2ой файл в массивы, и пропускаешь 1 файл через массивы...
>как получеться оптимальнее, решай сам... в разных ситуациях по разному... в
>одних нужна скорость, в других можно пренебречь, но поберечь ресурсы
Я не знаю, что такое массив. Если можно напишите проще. Еще вся ботва в том, что нужен скрипт, с помощью которого я могу делать эту операцию периодически. Это возможно?
>открываешь доку по башу, заганяешь 1 строку 2го файла в массив, прогоняешь
>1 файл, берешь 2ую строку... и т.д.
>или заганяешь 2ой файл в массивы, и пропускаешь 1 файл через массивы...
>как получеться оптимальнее, решай сам... в разных ситуациях по разному... в
>одних нужна скорость, в других можно пренебречь, но поберечь ресурсы
мужики,всем дарофф,не мучайте парня, пусть читает man grep, ,man awk
>>открываешь доку по башу, заганяешь 1 строку 2го файла в массив, прогоняешь
>>1 файл, берешь 2ую строку... и т.д.
>>или заганяешь 2ой файл в массивы, и пропускаешь 1 файл через массивы...
>>как получеться оптимальнее, решай сам... в разных ситуациях по разному... в
>>одних нужна скорость, в других можно пренебречь, но поберечь ресурсы
>
>
>мужики,всем дарофф,не мучайте парня, пусть читает man grep, ,man awkКстати, если файлы можно сортировать, то еще проще: man sort и man comm.
на баше можно загнать в массив, что бы баш делал автоотределения масива, тоже что и авк, но приетом значительно меньше памяти расходуеться и скорость выше... я в свое время етот вопрос обсасывал и пришел к такому выводу, что лучше на баше строить.man bash
>на баше можно загнать в массив, что бы баш делал автоотределения масива,
>тоже что и авк, но приетом значительно меньше памяти расходуеться и
>скорость выше... я в свое время етот вопрос обсасывал и пришел
>к такому выводу, что лучше на баше строить.
>
>man bashНу нет у меня баша, хоть убейте! И не пользуюсь я им! И ставить ради подобных сомнительных преймуществ не стал бы, т.к. в данном случае задача единоразовая, и память для изложенных условий не критичный фактор. Уж лучше использовать более портабельный вариант (sed, awk, comm). Да и perl еще забыли упомянуть.
P.S. Кстати, что так уперлись в массивы? Я уже изложил подход, который ВООБЩЕ не требует массивов, так что про "расход памяти" лучше помолчать. :)
Ладно. Спасибо всем. Буду читать маны. Только через них лежит путь к пониманию :) Благо что часть их на русском.
Странно, как это нет баша? Такого не встречал.
На мой взгляд равноценно задача решается как на баше так и на перрл, написать готовое решение не сложно, но принципиально то, что чел юзающий *никс должен такие задачи решать сам, это задачка для первокласника.
>Странно, как это нет баша? Такого не встречал.Так а Вы, видать, кроме Linux никаких *nix систем и не знаете. :)
Например, в *BSD нет bash, ставится из портов, если он нужен.
К тому же, bash - это ДАЛЕКО не единственная оболочка, так что...
>Так а Вы, видать, кроме Linux никаких *nix систем и не знаете.
>:)
да, да совершенно незнаю :) читая заголовок делаешь вывод, что чел юзает линукс>Например, в *BSD нет bash, ставится из портов, если он нужен.
>К тому же, bash - это ДАЛЕКО не единственная оболочка, так что...
>
видимо у Вас какой-то специальный, заказной дистр BSD, что на нём есть всё что нужно.
Почему-то мне пришлось 80% FreeBSD ставить из портов.
>>Например, в *BSD нет bash, ставится из портов, если он нужен.
>>К тому же, bash - это ДАЛЕКО не единственная оболочка, так что...
>>
>видимо у Вас какой-то специальный, заказной дистр BSD, что на нём есть
>всё что нужно.
>Почему-то мне пришлось 80% FreeBSD ставить из портов.Разговор шел о bash. В базовой установке FreeBSD его нет, есть в портах, но лично я им не пользуюсь, а потому не ставлю. :)
>Друзья! Помогите сделать такую вещь:
>Есть файл 1.txt и есть файл 2.txt
>Нужно удалить строки из файла 1.txt которые идентичны строкам из 2.txt
>Другими словами нужно "вырезать" содержимое файла 2.txt из файла 1.txt
>Файл 1.txt имеет около 1500 строк. Файл 2.txt имеет около 300 строк.
>
Мужики! Я разобрался! На самом деле не нужны никакие массивы в этом случае. Вся операция выполняется с помощью команды comm.
>>Друзья! Помогите сделать такую вещь:
>>Есть файл 1.txt и есть файл 2.txt
>>Нужно удалить строки из файла 1.txt которые идентичны строкам из 2.txt
>>Другими словами нужно "вырезать" содержимое файла 2.txt из файла 1.txt
>>Файл 1.txt имеет около 1500 строк. Файл 2.txt имеет около 300 строк.
>>
>
>
>Мужики! Я разобрался! На самом деле не нужны никакие массивы в этом
>случае. Вся операция выполняется с помощью команды comm.а как удалять строки из файла 1.txt ? видимо одной комманды comm маловато.
теоретически,можно , сделать выборку... и удалить файл (исходный) заменив полученым...
>>>Друзья! Помогите сделать такую вещь:
>>>Есть файл 1.txt и есть файл 2.txt
>>>Нужно удалить строки из файла 1.txt которые идентичны строкам из 2.txt
>>>Другими словами нужно "вырезать" содержимое файла 2.txt из файла 1.txt
>>>Файл 1.txt имеет около 1500 строк. Файл 2.txt имеет около 300 строк.
>>>
>>
>>
>>Мужики! Я разобрался! На самом деле не нужны никакие массивы в этом
>>случае. Вся операция выполняется с помощью команды comm.
>
>а как удалять строки из файла 1.txt ? видимо одной комманды comm
>маловато.
При запуске без ключей команда comm выдает результат в три столбца. Первый столбец
содержит строки, уникальные для ФАЙЛА1, второй -- уникальные для
ФАЙЛА2, а третий -- общие для обоих файлов строки.Есть следующие ключи:
-1 не показывать строки, уникальные для ФАЙЛА1
-2 не показывать строки, уникальные для ФАЙЛА2
-3 не показывать строки, встреченные в обоих файлахСтавим ключи -2 и -3. На вывод получаем только строки уникальные для файла 1.txt
Добавляем вывод в файл 3.txt и получаем в файле 3.txt отфильтрованный файл.В общем команда выглядит так comm -2 -3 1.txt 2.txt > 3.txt
И ВСЕ!