Это может сработать для вас:
# seq 1 15 | sed '/^1/!d' | sed -n '$='
7
Объяснение:
Удалите все строки, кроме тех, которые совпадают. Передайте эти совпадающие (игнорируемые) строки другой команде sed
. Удалите все эти строки, но покажите номер только последней строки. Таким образом, в этом примере игнорируются строки с 1 по 15, строки с 1, 10 по 15 — всего 7 строк.
РЕДАКТИРОВАТЬ:
Извините, неправильно прочитал вопрос (все еще немного запутался!):
sed 's,.*,sed "/&/!d;s/.*/matched &/" input.txt| uniq -c,' ignore.txt | sh
Это показывает количество matches
для каждого шаблона в ignore.txt
sed 's,.*,sed "/&/d;s/.*/non-matched &/" input.txt | uniq -c,' ignore.txt | sh
Это показывает количество non-matches
для каждого шаблона в ignore.txt
При использовании GNU sed
это тоже должно работать:
sed 's,.*,sed "/&/!d;s/.*/matched &/" input.txt | uniq -c,;e' ignore.txt
or
sed 's,.*,sed "/&/d;s/.*/non-matched &/" input.txt | uniq -c,;e' ignore.txt
Н.Б. Ваш успех с шаблонами может варьироваться, например, заранее проверьте метасимволы.
Поразмыслив, я подумал, что это можно улучшить до:
sed 's,.*,/&/i\\matched &,;$a\\d' ignore.txt | sed -f - input.txt | sort -k2n | uniq -c
or
sed 's,.*,/&/!i\\non-matched &,;$a\\d' ignore.txt | sed -f - input.txt | sort -k2n | uniq -c
Но НЕТ, на больших файлах это на самом деле медленнее.
person
potong
schedule
01.12.2011
sed
илиawk
? - person Eric Wilson   schedule 01.12.2011