Удалить строку из txt файла если не нашлось совпадения
Есть много_txt_файлов и еще один с данными. Нужно удалить из файла с данными строку если в много_txt_файлов не нашлось совпадения.
в файле с данными 4000 строк, одно значение в строке, много_txt_файлов 1900 штук, три значения в строке
хочется более менее простого решения, в чем смогу сам разобраться если вдруг понадобится внести изменения
знаю что бесплатно никто не работает) оставите координаты отправлю немного на чтосамирешите)
xohox
02.10.21 18:05:58 MSK

Зачем тебе grep и прочие Shell-костыли для этого? Возьми какой-нибудь нормальный ЯП, например, Python и сделай всё с его помощью.
EXL ★★★★★
( 02.10.21 18:08:28 MSK )
Нужно удалить из файла с данными строку если в много_txt_файлов не нашлось совпадения.
Может наоборот? Добавлять в новый файл строку если grep пустой?
anonymous
( 02.10.21 18:13:24 MSK )
Цикл, awk и [ в помощь.
anonymous
( 02.10.21 18:17:09 MSK )
#!/usr/bin/bash data_file="$1" many_files_dir="$2" tmp_file=$(mktemp) cat "$data_file" | while read line; do if grep -Fqr "$line" "$many_files_dir"; then echo "$line" >> "$tmp_file" fi done mv "$tmp_file" "$data_file"
Я не проверял, конечно. И это, по идее, должно работать, только если строки идеально совпадают. Если надо прям значения сравнивать, без учёта пробелов, то такой вариант не подойдёт.
anonymous
( 02.10.21 18:25:02 MSK )
Ответ на: комментарий от anonymous 02.10.21 18:25:02 MSK
Может быть ещё -x стоит добавить к аргументам grep.
anonymous
( 02.10.21 18:30:46 MSK )
Можно решать задачу по другому.
Читаешь файл построчно и ищешь совпадения в файлах, если нашлось заносить строку в другой новый файл ( в один и тот же).
В конце получаешь новый файл в котором только строки что нашлись.
anonymous
( 02.10.21 20:48:39 MSK )
… знаю что бесплатно никто не работает)
Почему же?
Многим помогают, кто приводит код и говорит о проблемах.
А те кто просто просят СДЕЛАЙТЕ МНЕ, тех в job /жопу по просто народному/ отсылают …
anonymous
( 02.10.21 20:57:08 MSK )
Ответ на: комментарий от anonymous 02.10.21 18:25:02 MSK
Что-то не взлетает, записывает в новый файл значения из data_file, на этом всё. Строки конечно же не совпадают.
строки в файлах в many_files_dir
76.9.16.1:3510 47.16.38.12:55194 ESTABLISHED 76.9.16.1:35356 19.197.55.71:51152 SYN_SENT
строки в data_file
по моей задумке в новый файл должен попасть только 47.16.38.12
сможешь что-то с этим сделать?
xohox
( 02.10.21 20:59:17 MSK ) автор топика
Ответ на: комментарий от anonymous 02.10.21 20:57:08 MSK
Можно в job попросить модератора перенести, но я ж вроде написал, что готов материально отблагодарить.
Могу и сам сидеть ковыряться, но, как всегда, нужно сейчас. Поэтому и обратился.
xohox
( 02.10.21 21:02:09 MSK ) автор топика
Ответ на: комментарий от xohox 02.10.21 21:02:09 MSK
Могу и сам сидеть ковыряться, но, как всегда, нужно сейчас.
Вы анализируете лог файл.
Что вы хотите найти в нем?
anonymous
( 02.10.21 21:04:23 MSK )
touch result.txt for w in `cat data.txt` do if [ -z `grep -r $w ./filesdir/` ] then echo $w >> results.txt fi done mv results.txt data.txt
AKonia ★★
( 02.10.21 21:08:46 MSK )
Ответ на: комментарий от xohox 02.10.21 20:59:17 MSK
Ну, по логике всё должно быть как ты хочешь. Может быть у тебя файл с данными в той же папке лежит, что и txt-файлы?
anonymous
( 02.10.21 21:22:49 MSK )
Ответ на: комментарий от xohox 02.10.21 20:59:17 MSK
Проверил на вот этих твоих данных сейчас. Структура файлов такая:
./script.sh ./data.txt ./txt/f.txt
$ cat data.txt 47.16.38.12 1.1.9.5 $ cat txt/f.txt 76.9.16.1:3510 47.16.38.12:55194 ESTABLISHED 76.9.16.1:35356 19.197.55.71:51152 SYN_SENT
$ ./script.sh data.txt txt $ cat data.txt 47.16.38.12
То есть пропала запись 1.1.9.5 . Так ведь надо было?
anonymous
( 02.10.21 21:32:28 MSK )
grep -v 'pattern' file > newfile
anonymous
( 02.10.21 21:49:47 MSK )
Ответ на: комментарий от AKonia 02.10.21 21:08:46 MSK
Хочу оставить в data файле только ip с которых подключаются и удалить те, с которых подключения прекратились.
Ругается вот так
./start ./start: line 6: [: too many arguments ./start: line 6: [: too many arguments ./start: line 6: [: too many arguments
шестая строка if [ -z grep -r $w /root/test/ ]
выдает три строки с ошибками, но в data файле четыре строки
cat data 185.155.99.55 37.70.201.228 94.130.57.235 1.1.9.5
xohox
( 02.10.21 22:08:00 MSK ) автор топика
Ответ на: комментарий от anonymous 02.10.21 21:32:28 MSK
мой косяк, все работает)
xohox
( 02.10.21 22:13:23 MSK ) автор топика
Ответ на: комментарий от anonymous 02.10.21 21:32:28 MSK
напиши, пожалуйста, куда удобно будет отправить оплату
xohox
( 02.10.21 22:14:24 MSK ) автор топика
Ответ на: комментарий от xohox 02.10.21 22:14:24 MSK
Да ничего не надо. Купи жене или маме цветы 🙂
anonymous
( 02.10.21 23:11:45 MSK )
Ответ на: комментарий от anonymous 02.10.21 23:11:45 MSK
может на телефон отправить? напиши номер в личку, а то ты время тратишь, а пользуюсь я, неправильно это
результат теста, мало ли интересно, из 4000 строк осталось 130) огонь)
xohox
( 03.10.21 00:38:59 MSK ) автор топика
Ответ на: комментарий от xohox 03.10.21 00:38:59 MSK
Для меня это было несложно. Потратил я минут 5 на то, что мне в было интересно, что в этом неправильного? Но спасибо, что проявляешь ответственность 🙂
Тот твой огонь из моего окна не видно, к сожалению. А не думал завести БД под свои файлы? Возможно с языком запросов все твои задачи решались бы проще. Или, как тут правильно советуют, попробуй анализатор логов какой-нибудь, там уже должны быть решены все типовые задачи. Какой именно — я тебе не смогу посоветовать, так как сам ими не пользуюсь.
anonymous
( 03.10.21 01:17:10 MSK )
Ответ на: комментарий от anonymous 03.10.21 01:17:10 MSK
Тут какая штука, этот data файл собирался более года. Теперь я его почищу и это снова на год хватит. Анализатор/парсер у меня есть, это perl скрипт, 100 000 строк за одну секунду обрабатывает. Я вот только не знал как убрать уже не используемые.
В БД мне кажется пока нет смысла, но посмотрю конечно, может действительно стоит выкинуть мои костыли и использовать готовое решение.
Python-сообщество
![]()
- Начало
- » Python для новичков
- » Удалить строку из файла
#1 Ноя. 21, 2013 13:42:03
SmalllSMK Зарегистрирован: 2013-11-21 Сообщения: 2 Репутация: 0 Профиль Отправить e-mail
Удалить строку из файла
Доброе время суток.
Скажите как выполнить удаление строк из файла?
Я только постигаю азы. Это первая программа, особо не пинайте короч…
Надо, что бы перед циклом сработало удаление первой, второй и последней строк.
goods = open('goods.txt') report = open('report.txt') total = open('total.txt', 'a') counter = 0 for every_symbol in goods: every_symbol = every_symbol.split("|") data = [every_symbol[0].strip(), every_symbol[1].strip(), every_symbol[2].strip(), every_symbol[3].strip()] total.write(str(data) + "\n")
Как через python удалить строку в файле?
Весь интернет облазил, — везде только с замены на пробелы и подобное. Ни где не могу найти функцию, которая могла бы удалить строку в файле без оставления переноса.
- Вопрос задан более трёх лет назад
- 42542 просмотра
Комментировать
Решения вопроса 2
Системный администратор
Ответ написан более трёх лет назад
Нравится 3 1 комментарий
Николай Сидоренко @NSidorov Автор вопроса
То, что нужно спасибо!

Разрабатываю научное ПО на языке Python.
Можно попробовать использовать: subprocess.call(«sed -i ‘pattern’ file_name», shell=True).
Например для удаление из файла, содержащего числа в каждой строке, чтобы удалить строку с номер два, можно выполнить команду: subprocess.call(«sed -i ‘/2/d’ numbers.txt», shell=True).
Ответ написан более трёх лет назад
Нравится 1 2 комментария
Как удалить пустые строки из файла python
Удалить пустые строки можно считав все строки из файла, отфильтровать пустые, и записать новый файл.
cat file.txt # foobar # # fizzbazz # helloworld! # # python # # hexlet # with open('file.txt') as f: lines = f.readlines() non_empty_lines = (line for line in lines if not line.isspace()) with open('new_file.txt', 'w') as n_f: n_f.writelines(non_empty_lines) cat new_file.txt # foobar # fizzbazz # helloworld! # python # hexlet