удалить из file1 те строки которые есть в file2
строка = 1 слово
Вот все что напридумывал (с фантазией сегодня у меня слабо):
file1="~/file1.txt"
file2="~/file2.txt"
for i in $(cat $ylst)
do
$tmp=$(sed "/$i/d" $plst)
echo $tmp > $plst
done
и нифига...
Сам скрипт создает 2 списка (archlinux), yaourt only package & pacman package
PP - содержит список всех пакетов в системе
YP - только список пакетов из AUR
нужно чтоб в PP не было пакетов из YP.
помогите пожалуйста.
удалить из одного файла те строки которые есть в другом (bash)
Модераторы: /dev/random, Модераторы разделов
-
- Сообщения: 233
- ОС: Agilia & Frugalware
удалить из одного файла те строки которые есть в другом
Не спеши, а то успеешь, следствие - тише едешь точнее диагноз.
Блог арчевода - http://grif12.blogspot.com
Блог арчевода - http://grif12.blogspot.com
-
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
-
- Сообщения: 233
- ОС: Agilia & Frugalware
Re: удалить из одного файла те строки которые есть в другом
Чуток не то, получать ничего не нужно, нужно тупо удалить слова-строки из первого файла которые есть во втором и записать это в первый же файл, с записью я разберусь. Проблема в том что sed выводит плоды своей работы на экран (это не проблема, проблема в том что не удаляет нужные строки), это решается перенаправлением во временный файл.
Не спеши, а то успеешь, следствие - тише едешь точнее диагноз.
Блог арчевода - http://grif12.blogspot.com
Блог арчевода - http://grif12.blogspot.com
-
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
Re: удалить из одного файла те строки которые есть в другом
Ну, дык и в чём проблема?
В file1 теперь строки, которых нет в file2. Что не так?
Код: Выделить всё
join -v1 <(sort -u file1) <(sort -u file2) >$tmpfile
mv $tmpfile file1
Мои розовые очки
-
- Сообщения: 233
- ОС: Agilia & Frugalware
Re: удалить из одного файла те строки которые есть в другом
Что не так?
А должно быть: в file1 теперь нет строк которые есть в file2
Я по моему понял почему мой цикл не работает:
for i in $(cat $ylst)
в $ylst (список пакетов yaourt) слова распологаются в столбик и без пробелов (слово+перевод строки), а переменная i должна иметь вид - знач1 знач2 знач3 ..... нужно попробовать заменить каретку на пробелы. Пойду погуглю.
А должно быть: в file1 теперь нет строк которые есть в file2
Я по моему понял почему мой цикл не работает:
for i in $(cat $ylst)
в $ylst (список пакетов yaourt) слова распологаются в столбик и без пробелов (слово+перевод строки), а переменная i должна иметь вид - знач1 знач2 знач3 ..... нужно попробовать заменить каретку на пробелы. Пойду погуглю.
Не спеши, а то успеешь, следствие - тише едешь точнее диагноз.
Блог арчевода - http://grif12.blogspot.com
Блог арчевода - http://grif12.blogspot.com
-
- Модератор
- Сообщения: 4823
- Статус: фанат консоли (=
- ОС: GNU/Debian, RHEL
Re: удалить из одного файла те строки которые есть в другом
у sed есть опция -i и не нужны никакие временные файлы.
в данном коде, если в строке присутствуют пробелы, то они будут являться разделителями для переменных, и вместо одного цикла для "this pretty string" будут по отдельности прогоняться 3 цикла для "this", "pretty" и "string".
Вы ж даже не пробовали эту команду. Если бы попробовали, то увидели, что все строки, присутствующие в file2 будут удалены из file1. Именно это вы и просите.
Код: Выделить всё
$ df -h > file1
$ cp file1 file2
$ echo test >> file1
$ join -v1 <(sort -u file1) <(sort -u file2) > result
$ cat result
test
$
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
The more you believe you don't do mistakes, the more bugs are in your code.
-
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: удалить из одного файла те строки которые есть в другом
watashiwa_daredeska писал(а): ↑13.05.2010 20:18В file1 теперь строки, которых нет в file2. Что не так?
Объясните разницу между этими утверждениями. Потому как с логикой у меня вроде бы всегда было хортошо, но она от менря ускользнула.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
-
- Сообщения: 233
- ОС: Agilia & Frugalware
Re: удалить из одного файла те строки которые есть в другом
В file1 теперь строки, которых нет в file2.
неясная формулировка, откуда взялись строки которых нет в file2?
в file1 теперь нет строк которые есть в file2
Подразумевает удаление строк из file1 совпадающих со строками из file2
неясная формулировка, откуда взялись строки которых нет в file2?
в file1 теперь нет строк которые есть в file2
Подразумевает удаление строк из file1 совпадающих со строками из file2
Не спеши, а то успеешь, следствие - тише едешь точнее диагноз.
Блог арчевода - http://grif12.blogspot.com
Блог арчевода - http://grif12.blogspot.com
-
- Бывший модератор
- Сообщения: 7390
- Статус: думающий о вечном
- ОС: Debian, LMDE
Re: удалить из одного файла те строки которые есть в другом
Как откуда? Из file1, конечно. Вы всё-таки попробуйте предложенный вариант.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
-
- Сообщения: 233
- ОС: Agilia & Frugalware
Re: удалить из одного файла те строки которые есть в другом
Попробовал, помогло за что и благодарю.
Не спеши, а то успеешь, следствие - тише едешь точнее диагноз.
Блог арчевода - http://grif12.blogspot.com
Блог арчевода - http://grif12.blogspot.com