Вы можете направить вывод каждой команды в tee file
и хвост -файла. Синхронизация между процессами отсутствует, поэтому вывод будет чередоваться (возможно некрасивым образом ). Если вы беспокоитесь о заполнении диска, вы можете вместо этого выводить в именованный канал:
[first screen]
$ mkfifo /tmp/foo
$ tail -f /tmp/foo
[second screen]
$ command1 | tee /tmp/foo
[third screen]
$ command2 | tee /tmp/foo
Основным подходом, состоящим из двух -шагов, было бы создание списка не -уникальных слов и передача его в 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
Попытка выполнить следующую команду
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