Você pode conseguir isso com a cauda:
tail -f initial_input.txt -n 100000 | myprogram myindex myoptions - | filter_output >> initial_input.txt
Os bits importantes aqui são:
- cauda; Isso funciona exatamente como o cat, mas (com a opção -f) ele "segue" o final do arquivo, de modo que, à medida que o arquivo cresce, ele despeja mais dados no stdout. A opção -n especifica quantas linhas serão despejadas inicialmente (por padrão, acho que apenas 10), então você precisará que esse número seja pelo menos tão grande quanto o número original de linhas no arquivo.
; Notice at the end I use >> instead of > as in your question. This tells the shell to append to, rather than over-write the existing file.
Por favor, esteja ciente de que isso pode ser uma coisa "perigosa" se você não estiver em um ambiente rigidamente controlado. E o que quero dizer com "rigidamente controlado" é que você sabe que ninguém mais lerá ou gravará em seu arquivo initial_input.txt. Se mais de um processo estiver tentando gravar nesse arquivo de uma só vez, você obterá lixo dele. Mas parece que você provavelmente está trabalhando em arquivos que só você modifica, e você mesmo os coloca lá, então você deve estar seguro.