No exemplo da pergunta, parece que deve funcionar, com relação ao uso de fgrep .
O que parece errado é que o grep irá - se um outputfile.txt existir antes - provavelmente irá procurar novamente em sua própria saída, dependendo do tamanho do buffer e dos tamanhos de entrada. Se outputfile.txt não existia antes, parece que *.txt não corresponderá, porque não existe no momento da correspondência.
Realmente não parece o motivo do seu problema, mas vale a pena testar o que acontece quando outputfile.txt é armazenado em outro lugar.
Se não é isso, o que você poderia fazer?
Nos comentários, você mostra um exemplo inputfile.txt que causa o problema.
Eu assumo que o problema é causado por uma ou mais linhas nesse arquivo - quando usado com os mesmos arquivos *.txt .
Para descobrir quais linhas são o problema, você pode fazer uma pesquisa binária para as linhas: Você remove metade das linhas e tenta saber se funciona. Se o problema desaparecer, use as linhas removidas para continuar, caso contrário, as linhas restantes. Agora você repete isso até que você tenha apenas uma ou algumas linhas restantes - e nesse ponto você provavelmente já poderá ver a causa.