LINUX.ORG.RU

Сгрепить, а потом удалить строки из файла

 , ,


1

2

Друзья подскажите простое решение. Нужно из файла выцепить строки удовлетворяющие критерию, сохранить их в другой файл. А потом эти строки из исходного файла убрать.

Выцепить и сохранить я могу, а удалить как? Тут еще такой нюанс - размер исходного файла большой (несколько сотен метров).


Вот простой пример с непростым условием

root@root/tmp/test # cat ./test1
1
2
3
4
5
6
7
8
9
root@root /tmp/test # awk '$0 >= "2" && $0 <= "5"' ./test1
2
3
4
5

avin
() автор топика

Сначала сохранить нужные для удаления строки из файла file1 в файл file2, а потом выполнить

grep -v -x -f file2 file1

saahriktu ★★★★★
()
Ответ на: комментарий от saahriktu

Спасибо saahriktu, то что доктор прописал!

avin
() автор топика
Ответ на: комментарий от avin

Если файл действительно большой, возможно имеет смысл не делать по нему два прохода, а обойтись одним awk.

$ awk '($0 >= "2" && $0 <= "5") { print > "deleted"; next } 1' test1
1
6
7
8
9
$ cat deleted 
2
3
4
5

unterwulf
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.