Вместо этого вы можете использовать awk
. Это намного более гибко.
Например. для эмуляции grep -c
вы можете использовать:
awk '/Thenis/{total+=1}END{print "Thenis: ",total}'
Однако обратите внимание, что в этом случае (это также относится к grep
) учитываются только строки со словом Thenis. Это не счет слова Thenis.
Если вам нужно подсчитать количество слов Thenis в файле, вы можете использовать следующую конструкцию awk
:
awk '/Thenis/{total+=gsub("Thenis","")}END{print "Thenis: ",total}
или способ с переменными (для ввода Тогда только один раз)
awk -v word="Thenis" '$0 ~ word{total+=gsub(word,"")}END{print word,": ",total}
Причина, по которой оператор канала |
не работает, заключается в том, что оператор канала ожидает другую команду. Оператор перенаправления вывода >
выводит данные в файл, а именованный канал — это файл в общем смысле, а не обычный файл.
Вывод в канал обычно буферизуется, вы можете сбросить поток вывода или изменить буферизацию стандартного вывода.
В вашем случае самым элегантным решением было бы открыть именованный канал в Python, написать строку («ответ» или «пока» ), а затем закрыть файл/канал. Таким образом, вы отделили серверный процесс от клиента Python. Вы даже можете перезапустить серверный процесс(twinkle -c
)и оставить процесс Python запущенным.