Как я могу удалить строки из файла, если строка появляется на нескольких строках?

Вы можете направить вывод каждой команды в tee fileи хвост -файла. Синхронизация между процессами отсутствует, поэтому вывод будет чередоваться (возможно некрасивым образом ). Если вы беспокоитесь о заполнении диска, вы можете вместо этого выводить в именованный канал:

[first screen]
$ mkfifo /tmp/foo
$ tail -f /tmp/foo

[second screen]
$ command1 | tee /tmp/foo

[third screen]
$ command2 | tee /tmp/foo
-1
08.07.2019, 01:14
2 ответа

Основным подходом, состоящим из двух -шагов, было бы создание списка не -уникальных слов и передача его в grep -v.

Для первой части вы можете использовать sortиuniq -d(после сериализации слов -, возможно, сtr)или -, если вы хотите продолжать использовать awk, что-то вроде:

awk -vRS='[ \t\n]' 'seen[$0]++' file

, который разбивает записи на пробелы и печатает те, которые были просмотрены ранее. Так

$ awk -vRS='[ \t\n]' 'seen[$0]++' file | grep -Fvf- file
apple pear
spoon fork
sausage egg
1
28.01.2020, 05:09

Попытка выполнить следующую команду

for i in `cat filename| perl -pne "s/ /\n/g"| sort| uniq`; do j=`grep -c $i p.txt`; if [[ $j -eq 2 ]]; then sr=`echo $i`; else sed -n '/'$i'/p' p.txt| sed -n '/'$sr'/!p'; fi; done| awk '{if (!seen[$0]++)print $0}'

выход

apple pear
sausage egg
spoon fork
0
28.01.2020, 05:09

Теги

Похожие вопросы