Você provavelmente não deve tentar cortar cut
. Na verdade, tentar consolidar um pipeline em um único processo para o manuseio de linhas de entrada de 32M provavelmente afetará negativamente o tempo de conclusão geral da tarefa. Isso depende, no entanto, do tipo de computador em que você executa o trabalho.
Se a máquina na qual você processa seus dados tiver vários núcleos de processador, geralmente, consolidar um loop de tarefas em um único processo significa consolidar todo o trabalho em um único núcleo de processador. Isso pode ser desejável em sistemas com apenas um único núcleo de processador ou se o tempo de CPU for precioso, mas, na minha experiência, é melhor saturar um processador e usar todos os núcleos simultaneamente para concluir a tarefa mais cedo.
Dito isto, você definitivamente pode grep
apenas o segundo campo:
grep -E $'\t(.* )?yellow( .*)?\t' <infile
... esse padrão corresponderá apenas às cadeias que ocorrem entre dois caracteres de tabulação em uma linha e corresponderá apenas às cadeias que são limitadas em ambos os lados com um espaço ou uma das guias de delimitação de campo. Com o GNU grep
você também pode adicionar o parâmetro de correspondência de -m
ax para limitar a saída a não mais que 10K correspondências. E então ...
grep -m10000 -E $'\t(.* )?yellow( .*)?\t' <infile | cut -f3
... seria o suficiente para fazer o trabalho todo.